在网格世界案例研究中,我正在制作一个游戏。在游戏中,如果玩家点击“W”键,则调用shiftUp()方法,这使得某个实例的所有其他actor向下移动以创建玩家移动的幻觉。这不是方法的完成实现,但是这应该获取网格中的所有actor并测试它们是否是扩展Actor的名为Enemy的类的实例。如果是这样,演员应该向上移动一个空格。当我调用此方法时,在调用enemy.moveTo(...)的行上调用NullPointerException;这不应该发生,因为我检查它是否为空。谁能帮我这个?我明白了: 线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException
public void shiftUp()
{
if (((GameGrid)getGrid()).getMinX() != 0)
{
Grid<Actor> grid = getGrid();
if (grid != null)
{
for (int y = 0; y < getGrid().getNumRows(); y++)
for (int x = 0; x < getGrid().getNumCols(); x++)
{
Actor enemy = grid.get(new Location(y,x));
if (enemy != null && enemy instanceof Enemy)
enemy.moveTo(new Location(enemy.getLocation().getRow() - 1, enemy.getLocation().getCol()));
}
}
}
}
答案 0 :(得分:1)
由于您事先正在检查enemy != null
,我猜测enemy.getLocation()
正在返回null
,这会在您致电NullPointerException
时导致null.getRow()
和null.getCol()
。
如果是这种情况,那么看起来问题是您的Actor
在网格中从未被赋予正确的Location
。确保您使用putSelfInGrid(Grid<Actor> grid, Location loc)
方法将Actor
置于网格中(不 grid.put(Location loc, E obj)
),因为putSelfInGrid()
设置了Actor
相应的位置。