我正在使用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()
方法
答案 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碰撞处理。