0
私はゲームを作っていますが、私はまだ画面作成のプロセスにいます。 黒、濃いグレー、明るい灰色、白の色のスプライトシートを作成しましたが、明るい色にしたいのですが、最初の色を初期化しようとするとArryIndexOutOfBoundsExeptionが表示されます。色を使用しようとするとArrayIndexOutOfBoundsExeptionが発生するJava
これは私が手助けするクラスのための私のコードです:誰かがexeptionがなくなっているように、問題を解決する方法を知っている場合は、返信気軽に
public static final int MAP_WIDTH = 64;
public static final int MAP_WIDTH_MASK = MAP_WIDTH - 1;
public int[] tiles = new int[MAP_WIDTH * MAP_WIDTH_MASK];
public int[] colours = new int[MAP_WIDTH * MAP_WIDTH_MASK * 4];
public int xOffset = 0;
public int yOffset = 0;
public int width;
public int height;
public SpriteSheet sheet;
public Screen(int width, int height, SpriteSheet sheet){
this.width = width;
this.height = height;
this.sheet = sheet;
for(int i = 0; i < MAP_WIDTH * MAP_WIDTH; i++){
colours[i*4+0] = 0xff00ff;
colours[i*4+1] = 0x00ffff;
colours[i*4+2] = 0xffff00;
colours[i*4+3] = 0xffffff;
}
}
public void Render(int[] pixels, int offset, int row){
for(int yTile = yOffset >> 3; yTile <=(yOffset + height) >> 3; yTile++){
int yMin = yTile * 8 - yOffset;
int yMax = yMin + 8;
if(yMin < 0) yMin = 0;
if(yMax > height) yMax = height;
for(int xTile = xOffset >> 3; xTile <=(xOffset + width) >> 3; xTile++){
int xMin = xTile * 8 - yOffset;
int xMax = xMin + 8;
if(xMin < 0) xMin = 0;
if(xMax > width) xMax = width;
int tileIndex = (xTile & (MAP_WIDTH_MASK)) + (yTile & (MAP_WIDTH_MASK)) * MAP_WIDTH ;
for(int y = yMin; y < yMax; y++){
int sheetPixel = ((y + yOffset) & 7) * sheet.width + ((xMin + xOffset) & 7);
int tilePixel = offset + xMin + y * row;
for(int x = xMin; x < xMax; x++){
int colour = tileIndex * 4 + sheet.pixels[sheetPixel++];
pixels[tilePixel++] = colours[colour];
}
}
}
}
}
;)
すべてのArrayIndexOutOfBoundsExceptionは重複しています。このような質問には、ほとんどの場合、オートクローゼスが必要です。そして、最小限の検証可能な例については何が難しいでしょうか? – KevinO
単純な検証を行うと、「スレッド内の例外」メイン「java.lang.ArrayIndexOutOfBoundsException:16128 at(ある行番号)」を受け取ります。配列のサイズは16128なので、[16128]に何かを置くことはできません。 – KevinO
配列は通常0バインドなので、インデックスから1を差し引いて正しい場所に配置する必要があります。 – Brody