我在游戏中有一个我正在控制的角色,我正在尝试使用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;
idX
和idY
设置为零,是我的角色的坐标。我收到这个错误:
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)
我的错误意味着什么,但我不知道为什么我会得到它。我现在的代码中没有单个数组。谁能给我一些帮助?
谢谢!
答案 0 :(得分:0)
Java堆栈跟踪非常有用且易于理解,我无法解释您的困惑。 您不使用数组,但跟踪指出map.getTileId()
调用Layer.getTileID()
并且确实使用数组(link源):
public int getTileID(int x, int y) {
return data[x][y][2];
}
因此,idX
或idY
会在您的通话中保留188
。我们不能在不访问您的完整代码的情况下说为什么,但是您的characeter存在问题:您认为它位于(0, 0)
发髻实际上它不是。也许这是竞争条件或API失误,或对象严重初始化:我们不能说,但至少你知道在哪里寻找。
答案 1 :(得分:0)
我知道这是旧的。但是,我也遇到了这个问题,我修复它的方法是将玩家协调分割为平铺大小,因为地图是一个平铺数组。
示例:
int tileID = map.getTileId(playerX / TILE_SIZE, playerY / TILE_SIZE, 0);