重启游戏时场景图层出错

时间:2013-04-30 09:02:49

标签: android andengine

我在这里有两个精灵easyEnemy&推土机。 easyEnemy每秒都会产卵。所以我使用时间处理程序。推土机只在一个随机时间进行一次。

编辑:

我使用通用池来重用easyEnemy。重新启动时,我将它们发送到池中以便重用。对于推土机,我使用正常程序。

我想把推土机放在所有easyEnemy之上。我为此创建了两个层。喜欢: 在GameScene里面:

final int FIRST_LAYER = 0;
final int SECOND_LAYER = 1;

// i call this very first entities in scene
public void createLayers() {


                attachChild(new Entity()); // First Layer
                attachChild(new Entity()); // Second Layer
        }

我在场景中调用了createLayers()非常第一个实体。显然只有一次。我在场景中附上了easyEnemy和推土机,如:

// it is called in every seconds inside  time handler
        getChildByIndex(FIRST_LAYER).attachChild(aEasyEnemy);

// it is called only once
        getChildByIndex(SECOND_LAYER).attachChild(aBulldozer);

它第一次正常工作。推土机在easyEnemy上方移动。 :)

问题

当我重新开始游戏时,只有推土机首先带有缩放功能。但我没有按比例缩放bullDozer。在推土机从场景中传出后,容易发生敌人的攻击。相机的高度和宽度也会缩短设备内部。行为与第一次运行不一样。我在重启时做了什么?代码如下。

更新

    public void onGameRestart() {

                if (hasChildScene()) {

                        clearChildScene();
                        detachChildren();
                        clearTouchAreas();
                        clearEntityModifiers();
                        clearUpdateHandlers();

                        reset();
                        back();
    // sorry I recycle easy Enemy by using pool
    recycleEasyEnemy();

    //  create layers again
    createLayers();

    // call to come again 
    createEasyEnemy(.6f, 28f, 28f);
    createBullDozer();

                 }
        }

更新:这是recycleEasyEnemy代码:

public void recycleEasyEnemy() {
    // send them to pool for reuse

    for (EasyEnemy e : easyEnemyLinkedList) {
        EasyEnemyPool.getSharedEasyEnemyPool().recyclePoolItem(e);
    }
    easyEnemyLinkedList.clear();
}

很抱歉之前没有显示我的recycleEasyEnemy代码。运行此版本后,只剩下一个问题,那就是推土机在重启后通过现场后出现的问题。

NB:当我没有调用recycleEasyEnemy时,它就像第一次运行一样正常。但我必须重用easyEnemy!每次重启!不是吗?

解决了:解决了新的相机高度/宽度问题。

我差不多完成了。我需要专家关注这段代码。为了简化帖子,我只是避免常见的代码块。 谢谢。 ;)

帖子也是here

3 个答案:

答案 0 :(得分:2)

您需要在回收时调用detachSelf(),或者您也可以将父设置为null,它将解决您的问题。 :)

答案 1 :(得分:1)

根据我的观点,当您使用onGameRestart()方法同时清除场景时,您的两个图层也会从场景中分离出来。

因此,下次当您的createEasyEnemy()和createBullDozer()方法在 0 1 索引元素上添加数据时。所以这次你的0和1索引元素是另一个实体而不是实体。因此,您必须首先附加您的实体,以便像第一次运行一样正常。

只是因为这样你的第一次跑步才是完美的,下次就会出问题。

答案 2 :(得分:0)

从onGameRestart()方法中删除detachChildren();

相关问题