安卓系统:AndEngine空指针错误



我正在使用AndEngine制作游戏。现在,我有一个由几个Sprite对象填充的ArrayList。我有另一个Sprite,我要检查它的冲突,然后在一个小延迟后删除ArrayList中的Sprite。然而,我认为我错了,因为我在ArrayList:上得到了一个空指针错误

for (int i = 0; i < mIceArray.size(); i++) {
    if (this.collidesWith(mIceArray.get(i))) {
        final int mIndex = i;
        TimerHandler iceRemovalTimer = new TimerHandler(0.1f, new ITimerCallback() {
            @Override
            public void onTimePassed(final TimerHandler pTimerHandler) {
                removeIce(mIceArray.get(mIndex));
                mIceArray.remove(mIndex);
                unregisterUpdateHandler(pTimerHandler);
                }
        });
        mEngine.registerUpdateHandler(iceRemovalTimer);
    }
}

如果有人有建议,我们将不胜感激!谢谢

编辑:这段代码在我的另一个Sprite的onManagedUpdate()方法

您没有发布错误日志,以及在哪里初始化mIceArray。但我预料到了你的问题:

在基于冲突状态和计时器对mIceArray进行迭代的过程中,您尝试修改它。这会在运行时调试时欺骗你的头脑。原因可能是:

  • 在场景中更新精灵之前,mIceArray不会启动
  • mIceArray.get(index)行中提取错误,而索引处的项已删除

为此,您可以使用:

synchronized (mIceArray)
{
    for(....)
    {
        //your code to check mIceArray
        //and store (mark) the object to be removed from array
    }
    //remove obj outside the for loop
}

为什么不试试AndEngine解决方案:

  • CollisionHandlerICollisionCallback用于场景碰撞检查,或
  • ContactListner用于Physcis碰撞处理

最新更新