0

我有两个精灵 BOX 和 EasyEnemy。他们已经附在现场,并且随机移动。当它们相互碰撞时,我想将简单的敌人附加为 BOX 精灵的孩子。

EasyEnemy 来自场景中的通用池。我像往常一样遍历BOX sprite onManageUpdate() 和 BOX sprite create 内的所有EasyEnemy 。

这是我的代码:

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

当我发生碰撞时,此方法被多次调用,因此尝试多次附加一个子父级,并且您已经知道一个子级一次只能有一个父级。因此,要么您需要更改逻辑以便仅调用一次碰撞方法,要么您需要在 ee.setParent(aBox); 之前调用 ee.detachself();

于 2013-04-03T05:14:53.773 回答