加载错误位置的Cocos2D-X节点具有RemoveAllChildren()

时间:2016-02-04 18:27:05

标签: cocos2d-x

我只使用一个场景对象为我的整个2d sidecrolling平台有两层:控制器有一个hudLayer,游戏中的所有内容都有gameLayer。

当我控制我的角色走进一个门(带有一个带回调的物理实体的精灵,将我带到下一个级别)时,下一级加载这些指令:

  • 删除所有事件侦听器
  • 停止两个图层的所有操作(gameLayer通常在播放器后面执行Follow操作,并且仅限于backgroundSpriteNode的大小)
  • 从gameLayer中删除所有孩子
  • 将gameLayer位置设为Vec2(0,0)
  • 加载级别2(1级应该是什么样子的完整副本......将背景精灵加载到gameLayer,playerSprite,添加事件监听器)
  • 将事件侦听器添加回hudLayer

唯一的问题是,无论出于何种原因,关卡只会部分加载它应该的方式...例如,硬币出现在他们应该的位置,但平台似乎没有。无论是那个还是玩家,还是其他角色。不确定为什么这些物体没有明确加载到正确的位置,但也许有人在遇到此类问题之前可以提供帮助?

大多数节点(如平台)出现在屏幕底部,应该完全显示在屏幕底部。当它们出现在平台上方时,角色也会出现在那里。

P.S。经过多一点的测试后,我逐渐意识到有些平台正在加载到正确的位置,但有时却没有。不知道为什么。对此的修复可能是一次加载一个东西,它们之间有延迟。但我宁愿不必拖延,只是弄清楚这笔交易是什么。

1 个答案:

答案 0 :(得分:1)

想出来:无论出于何种原因,我需要在那里添加延迟。我想无论出于何种原因,通过调用removeAllChildren(),一些东西搞砸了这些位置。这是我的怀疑,因为有些时候,下一级的部分会加载,但只有部分,有时只是。

这是我添加的代码,一旦所有孩子被删除等,都会在gameLayer上运行一个动作......

runAction(Sequence::createWithTwoActions(DelayTime::create(0.1), CallFunc::create( [&] ( ) {
            loadLevel2(this);
        })));