GetTileID()抛出数组异常

时间:2012-09-30 12:26:21

标签: java arrays bounds

我在游戏中有一个我正在控制的角色,我正在尝试使用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)

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

谢谢!

2 个答案:

答案 0 :(得分:0)

Java堆栈跟踪非常有用且易于理解,我无法解释您的困惑。 不使用数组,但跟踪指出map.getTileId()调用Layer.getTileID()并且确实使用数组link源):

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

因此,idXidY会在您的通话中保留188。我们不能在不访问您的完整代码的情况下说为什么,但是您的characeter存在问题:您认为它位于(0, 0)发髻实际上它不是。也许这是竞争条件或API失误,或对象严重初始化:我们不能说,但至少你知道在哪里寻找。

答案 1 :(得分:0)

我知道这是旧的。但是,我也遇到了这个问题,我修复它的方法是将玩家协调分割为平铺大小,因为地图是一个平铺数组。

示例:

int tileID = map.getTileId(playerX / TILE_SIZE, playerY / TILE_SIZE, 0);