Slick中getColor()方法的ArrayIndexOutOfBoundsException

时间:2012-07-17 12:55:33

标签: java slick2d

我有这个代码来创建一个ArrayList,其中包含实际上有像素的所有像素位置(alpha!= 0)。

代码如下:

public ArrayList<Point> getPixels() {
    ArrayList<Point> output = new ArrayList<Point>();
    Image frameImage = img.getCurrentFrame();
    for (int FIx = 0; FIx <= img.getWidth(); FIx++) {
        for (int FIy = 0; FIy <= img.getHeight(); FIy++) {
            if (frameImage.getColor(FIx, FIy).getAlpha() != 0.00f) {//<-- Error
                output.add(new Point(FIx, FIy));
            }
        }
    }

    return output;
}

循环可以完成几次完成,没有任何错误,但是在运行的假定随机时间内,它会出现以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 32768
    at org.newdawn.slick.Image.getColor(Image.java:1248)
    at com.SourCherry.games.KittySniper.Enemy.Kitten.getPixels(Kitten.java:197)

我已将上述行(Kitten.java:197)标记为注释。

如果需要其他任何方法来帮助解决此问题,请在评论中提问。感谢。

1 个答案:

答案 0 :(得分:2)

这对我来说是个问题:

for (int FIx = 0; FIx <= img.getWidth(); FIx++) {
    for (int FIy = 0; FIy <= img.getHeight(); FIy++) {

您假设它的像素在包含 getWidthgetHeight的范围内。我强烈怀疑这些是独占的上限:

for (int FIx = 0; FIx < img.getWidth(); FIx++) {
    for (int FIy = 0; FIy < img.getHeight(); FIy++) {

因此,例如,宽度为3的图像应具有0,1和2的有效X值 - 3。

不可否认,这完全取决于org.newdawn.slick.Image究竟是什么,而这是我不熟悉的课程 - 但这是一个合理的起点。 (显然该方法不验证其输入是一种遗憾 - 它应该抛出一个不同的异常,但它仍然是你的编程错误。)