我正在尝试为我的slick2d
游戏制作可保留的物品,我认为这样做的好方法就是有一只手放在播放器上,为此我有1个像素的独特颜色,允许我找到该颜色,以及x +y
。
它完美地工作,直到我试图扩大图像,我得到这个疯狂的界限例外。
这是我的代码,可以找到x
和y
:
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
方法中的.. 我有一种感觉它很容易死,但它让我难过。感谢任何人的回应。
答案 0 :(得分:0)
getLocation
中的循环遍历图像的2x缩放副本的尺寸,但随后尝试访问原始像素。鉴于原始尺寸是原来尺寸的一半,当您在循环中途时,您将超出图像尺寸的范围。之一:
顺便说一下,发布的代码包含冗余调用... a)如果你要缩放,请考虑缩放图像,考虑缩放图像一次而不是将代码放在循环中b)不需要使用相同的参数调用getLocation
两次。调用一次,然后使用返回的数组