Android:AndEngine空指针错误

时间:2012-09-04 17:45:36

标签: android andengine

我正在使用AndEngine制作游戏。现在,我有一个ArrayList填充了几个Sprite个对象。我还有另一个Sprite用于检查冲突,然后在一小段延迟后移除Sprite中的ArrayList。但是,我想我错了,因为我的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()方法

1 个答案:

答案 0 :(得分:3)

您没有发布错误日志,也没有发布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解决方案:

    用于场景冲突检查的 CollisionHandler ICollisionCallback ,或
  • ContactListner 用于Physcis碰撞处理。