首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GridWorld中的移动算法

GridWorld中的移动算法
EN

Stack Overflow用户
提问于 2012-05-12 09:44:12
回答 1查看 591关注 0票数 0

在我的期末项目的网格世界案例研究中,我正在做一个游戏。在游戏中,如果玩家单击"W“键,则会调用shiftUp()方法,该方法会使某个实例的所有其他角色向下移动,以创建玩家移动的错觉。这还没有完成该方法的实现,但它应该获取网格中的所有参与者,并测试它们是否是一个名为Enemy的类的实例,该类扩展了Actor。如果是这样的话,演员应该向上移动一个空间。当我调用这个方法时,在调用enemy.moveTo(...)的行上调用了一个NullPointerException;这不应该发生,因为我检查它是否为null。有人能帮我吗?我得到了这个:线程"AWT-EventQueue-0“java.lang.NullPointerException中的异常

代码语言:javascript
复制
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()));
                }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-12 10:08:50

由于您事先要检查enemy != null,因此我猜测enemy.getLocation()返回的是null,这会在您调用null.getRow()null.getCol()时导致NullPointerException

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10560391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档