我有这个代码来创建一个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)标记为注释。
如果需要其他任何方法来帮助解决此问题,请在评论中提问。感谢。
答案 0 :(得分:2)
这对我来说是个问题:
for (int FIx = 0; FIx <= img.getWidth(); FIx++) {
for (int FIy = 0; FIy <= img.getHeight(); FIy++) {
您假设它的像素在包含 getWidth
和getHeight
的范围内。我强烈怀疑这些是独占的上限:
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
究竟是什么,而这是我不熟悉的课程 - 但这是一个合理的起点。 (显然该方法不验证其输入是一种遗憾 - 它应该抛出一个不同的异常,但它仍然是你的编程错误。)