0

私がコントロールしているゲームにキャラクターがいて、getTileId()彼の周りのタイルのタイル ID を取得するために使用しようとしています。私は TilED マップ エディターと slick2d を使用しています。私のコードは次のとおりです。

int tileID = map.getTileId(idX, idY, 0);        
System.out.println("Id: "+tileID);

地図:

public TiledMap map;

インポート元:

import org.newdawn.slick.tiled.TiledMap;

idXidYゼロに等しく設定され、私のキャラクターの座標です。次のエラーが表示されます。

java.lang.ArrayIndexOutOfBoundsException: 188
at org.newdawn.slick.tiled.Layer.getTileID(Layer.java:137)
at org.newdawn.slick.tiled.TiledMap.getTileId(TiledMap.java:228)
at tile.Game.update(Game.java:144)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:657)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)

エラーの意味はわかりますが、なぜエラーが発生するのかわかりません。現在、コードに配列が 1 つもありません。誰か助けてくれませんか?

ありがとう!

4

2 に答える 2

0

私はこれが古いことを知っています。ただし、私もこの問題を抱えていました。マップはタイルの配列であるため、プレイヤーの座標をタイルサイズで分割することで修正しました。

例:

int tileID = map.getTileId(playerX / TILE_SIZE, playerY / TILE_SIZE, 0);
于 2013-02-21T09:47:24.060 に答える
0

Java スタック トレースは非常に便利で理解しやすいので、あなたの混乱を説明することはできません。配列は使用しませんが、トレースには、map.getTileId()呼び出しLayer.getTileID()と配列の使用が示されています(ソースへのリンク)。

public int getTileID(int x, int y) {
        return data[x][y][2];
}

そのため、 or のいずれidXかが通話内にidY保持188されます。完全なコードにアクセスせずに理由を説明することはできませんが、文字に問題があります: bun にあると 思います(0, 0)が、実際にはそうではありません。おそらく、競合状態や API の誤用、またはオブジェクトの初期化が不適切である可能性があります。

于 2012-09-30T14:12:57.493 に答える