2

我这里有两个精灵 easyEnemy 和 BullDozer。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);

它第一次运行良好。Bulldozer 在easyEnemy 上方移动。:)

问题

当我重新开始游戏时,只有推土机首先带有缩放。但我没有缩放推土机。推土机离开现场后,容易的敌人来了。并且相机的高度和宽度也在设备内部缩短。行为与第一次运行不同。我在重新启动时会做什么?代码如下。

更新:

    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 代码。运行这个版本后,只剩下一个问题,那就是Easy Enemy是在推土机重启后通过现场后出现的。

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

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

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

帖子也在这里

4

3 回答 3

2

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

于 2013-05-02T07:17:15.043 回答
1

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

因此,下次当您的 createEasyEnemy() 和 createBullDozer() 方法将它们的数据添加到01索引元素时。所以这次你的 0 和 1 索引元素是另一个实体而不是Entity。因此,您必须首先附加您的实体才能使所有事情都像第一次运行一样正常。

正因为如此,您的第一次运行是完美的,下次遇到问题。

于 2013-05-01T15:53:52.343 回答
0

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

于 2013-04-30T09:39:50.520 回答