0

私は 2 つのスプライト BOX と EasyEnemyを持っています。それらはすでにシーンに取り付けられており、ランダムに動きます。ぶつかった時に当たりやすいエネミーをBOXスプライトの子として付けたいです。

EasyEnemy は、シーン内の汎用プールから取得されます。通常どおり、BOX スプライト onManageUpdate() 内のすべてのEasyEnemyと BOX スプライトの作成を繰り返します。

これが私のコードです:

private void moveBox() {
    aBox = new Sprite(0, 0, aResourceManager.boxTexture, vBOM) {

        @Override
        protected void onManagedUpdate(float pSecondsElapsed) {
            // Iterate over all Easy Enemy
            eIt = getEasyEnemyIterator();
            while (eIt.hasNext()) {
                final EasyEnemy ee = eIt.next();
                if (this.collidesWith(ee)) {
                    aResourceManager.mEngine
                            .runOnUpdateThread(new Runnable() {
                                @Override
                                public void run() {

                                    ee.clearEntityModifiers();
                                    ee.clearUpdateHandlers();
                                    ee.setIgnoreUpdate(true);
                                    ee.reset();                                     

                                    ee.setParent(aBox);
                                    aBox.attachChild(ee);

                                }
                            });

                }

            }

            super.onManagedUpdate(pSecondsElapsed);

        }

    };
    attachChild(aBox);
    aBox.registerEntityModifier(new MoveModifier(15, 360, 360, 0, 1200));
    aBox.setZIndex(9990);
}

次のようなエラーが発生しました

E/AndroidRuntime(2876): FATAL EXCEPTION: UpdateThread
E/AndroidRuntime(2876): java.lang.IllegalStateException: pEntity 'EasyEnemy' already has a parent: ''. New parent: ''!
E/AndroidRuntime(2876):     at org.andengine.entity.Entity.assertEntityHasNoParent(Entity.java:1412)
4

1 に答える 1

2

衝突が発生すると、このメソッドが複数回呼び出されるため、子または親を複数回アタッチしようとすると、子が一度に 1 つの親しか持つことができないことが既にわかっています。したがって、衝突メソッドが 1 回だけ呼び出されるようにロジックを変更するか、ee.setParent(aBox); の前に ee.detachself() を呼び出す必要があります。

于 2013-04-03T05:14:53.773 に答える