0

AndEngineを使ってゲームを作っています。現在、いくつかのオブジェクトArrayListが入力されています。衝突をチェックし、少し遅れてから削除するというSpriteものがもう1つあります。ただし、:でnullポインタエラーが発生するため、これは間違っていると思います。SpriteSpriteArrayListArrayList

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);
    }
}

誰か提案があれば、大歓迎です!ありがとう!

編集:このコードは私の他のスプライトのonManagedUpdate()メソッドの中にあります

4

1 に答える 1

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物理衝突処理用。
于 2012-09-05T04:34:21.433 に答える