0

在网格世界案例研究中,我的最后一个项目是我正在制作一个游戏。在游戏中,如果玩家点击“W”键,则调用 shiftUp() 方法,该方法使某个实例的所有其他角色都向下移动,从而产生玩家移动的错觉。这不是该方法的完成实现,但这应该获取网格中的所有参与者并测试它们是否是扩展 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()));
                }
        }
    }
}
4

1 回答 1

1

由于您正在事先检查enemy != null,我猜那enemy.getLocation()是返回null,这会导致NullPointerException您调用null.getRow()and时出现 a null.getCol()

如果是这种情况,那么看起来问题在于您从未在网格中Actor获得适当的权限。Location确保您使用该putSelfInGrid(Grid<Actor> grid, Location loc)方法将 放置Actor在网格中(不是 grid.put(Location loc, E obj)),因为相应地putSelfInGrid()设置您Actor的位置。

于 2012-05-12T02:08:49.607 回答