Slick2d通过像素颜色定位x和y

时间:2016-09-02 22:01:10

标签: java exception indexoutofboundsexception slick2d

我正在尝试为我的slick2d游戏制作可保留的物品,我认为这样做的好方法就是有一只手放在播放器上,为此我有1个像素的独特颜色,允许我找到该颜色,以及x +y

它完美地工作,直到我试图扩大图像,我得到这个疯狂的界限例外。

这是我的代码,可以找到xy

    public int[] getLocation(Image i, Color c){
    Image scaled = i.getScaledCopy(getWidth(), getHeight());
    for(int x = 0; x < scaled.getWidth(); x++){
        for(int y = 0; y < scaled.getHeight(); y++){
            if(scaled.getColor(x, y).r == c.r && scaled.getColor(x, y).g == c.g && scaled.getColor(x, y).b == c.b){
                int[] xy = {x,y};
                return xy;

            }
        }   
    }
    return null;
}

这就是我使用它的方式

    float x = (float) (getLocation(walkLeft.getCurrentFrame(), new Color(1, 1, 1))[0] + getX());
    float y = (float) (getLocation(walkLeft.getCurrentFrame(), new Color(1, 1, 1))[1] + getY());
    g.fillRect(x, y, 2, 2);

例外是:

java.lang.ArrayIndexOutOfBoundsException: 16384

它引导我回到这一行:

                if(i.getColor(x, y).r == c.r && i.getColor(x, y).g == c.g && i.getColor(x, y).b == c.b){
getLocation方法中的

.. 我有一种感觉它很容易死,但它让我难过。感谢任何人的回应。

1 个答案:

答案 0 :(得分:0)

getLocation中的循环遍历图像的2x缩放副本的尺寸,但随后尝试访问原始像素。鉴于原始尺寸是原来尺寸的一半,当您在循环中途时,您将超出图像尺寸的范围。之一:

  1. 不要缩放图像
  2. 如果必须缩放图像,请检查缩放图像的像素值而不是原始像素值。
  3. 顺便说一下,发布的代码包含冗余调用... a)如果你要缩放,请考虑缩放图像,考虑缩放图像一次而不是将代码放在循环中b)不需要使用相同的参数调用getLocation两次。调用一次,然后使用返回的数组