首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新启动游戏时场景层出错

重新启动游戏时场景层出错
EN

Stack Overflow用户
提问于 2013-04-30 09:02:48
回答 3查看 173关注 0票数 2

我这里有两个精灵,easyEnemy & bullDozer。easyEnemy在每一个seconds.So中产卵,我使用的是时间处理器,因为.A推土机只在一个随机时间出现一次。

编辑:

我使用泛型池来重用easyEnemy。当重新启动时,我将它们发送到池中进行重用。对于推土机,我使用正常的程序。

我想向您展示推土机,尤其是easyEnemy。我为此创建了两层。比如:在GameScene内部:

代码语言:javascript
复制
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和推土机,例如:

代码语言:javascript
复制
// 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上方移动。:)

问题

当我重新开始游戏,只有推土机与缩放first.But我不是缩放bullDozer。推土机从现场经过后,敌人就来了。相机的高度和宽度也缩短了在设备内。这种行为与我在重新启动时执行的第一个run.What不一样吗?代码在下面。

更新:

代码语言:javascript
复制
    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代码:

代码语言:javascript
复制
public void recycleEasyEnemy() {
    // send them to pool for reuse

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

很抱歉之前没有显示我的recycleEasyEnemy代码。在运行这个版本后,只剩下一个问题,那就是在推土机重新启动时经过现场后,很容易遇到敌人。

NB:,当我没有调用recycleEasyEnemy时,它的工作就像第一次运行一样好。但是我必须重用easyEnemy!每次重启!难到不是么?

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

,我快完成了。我需要一个专家来研究这段代码。为了文章的简单性,我只是避免了常见的代码块。谢谢。;)

post也是这里

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-02 07:17:15

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

票数 2
EN

Stack Overflow用户

发布于 2013-05-01 15:53:52

按照我的观点,当您同时使用onGameRestart()方法清除场景时,您的两个层也会与场景分离。

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

正因为如此,你的第一次跑步是完美的,下一次就有问题了。

票数 1
EN

Stack Overflow用户

发布于 2013-04-30 09:39:50

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16296031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档