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)

我的错误是什么意思,但我不知道为什么我会得到它。我现在的代码中没有一个数组。谁能给我一些帮助?

谢谢!

4

2 回答 2

0

Java 堆栈跟踪非常有用且易于理解,我无法解释您的困惑。不使用数组,但跟踪说明map.getTileId()调用Layer.getTileID()并且它确实使用数组链接到源代码):

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

因此,要么 要么idX保留idY188您的通话中。如果不访问您的完整代码,我们无法说明原因,但是您的字符存在问题:您认为它在 (0, 0)bun 实际上不是。可能是竞争条件或 API 误用,或者对象初始化不当:我们不能说,但至少你知道在哪里寻找。

于 2012-09-30T14:12:57.493 回答
0

我知道这是旧的。但是,我也遇到了这个问题,我修复它的方法是将玩家坐标除以图块大小,因为地图是图块数组。

例子:

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