replaceScene 是只替换当前场景还是替换 Cocos2d 中的所有场景

Posted

技术标签:

【中文标题】replaceScene 是只替换当前场景还是替换 Cocos2d 中的所有场景【英文标题】:Does replaceScene replace only the current scene or does it replace all scenes in Cocos2d 【发布时间】:2012-09-29 19:00:11 【问题描述】:

我在 Cocos2d 中有一个游戏,它有一个主场景(游戏场景)和一个用于转到“配置”场景的按钮。当用户单击主场景中的配置按钮时,我使用 pushScene 进入“配置”场景。我使用 pushScene 的原因是允许用户从中断的地方继续游戏。

在“配置”场景中有两个选项:“取消”和“确定”。如果用户点击“取消”,我会使用 popScene,游戏会从它离开的地方继续。如果用户点击“Ok”,我会使用 replaceScene,因为我希望游戏以新配置从头开始。

所以,当用户点击“确定”时,我知道“配置”场景被新的游戏场景替换了,但是旧的游戏场景也被替换了吗?否则,我是在做正确的事情还是应该实施其他方式让游戏场景知道它应该恢复还是重新启动。

我想通过累积未替换的场景来确保我不会泄漏内存。

【问题讨论】:

【参考方案1】:

replaceScene 方法按照它所说的去做。它替换了当前场景。如果您有 10 个场景相互叠加,它将替换第 10 个场景,并且所有之前的场景都将保留。

这也是我不推荐使用 pushScene 的原因之一。很容易忘记场景可能被推送多于弹出的情况。另一个原因是 popScene 无法使用过渡进行动画处理。

顺便说一句,如果您在 pushScene 之后执行 replaceScene,然后在新替换的场景中执行 popScene,您可以轻松测试此行为。你会看到旧场景弹出。通常,如果你 popScene 堆栈中只有一个场景,它会抛出一个断言。

【讨论】:

谢谢。在这种情况下,我将尝试在不使用 pushScene 的情况下创建该功能,因为我确实想通过过渡对其进行动画处理。根据用户的操作,您对如何恢复游戏或重启游戏有什么建议吗?

以上是关于replaceScene 是只替换当前场景还是替换 Cocos2d 中的所有场景的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d-x 3.2中Replacescene时内存不释放

Cocos2d-X研究之3.0 场景切换特效汇总

在孩子的 -onExit 方法中停止声音?

python 对于当前Blender场景中的所有对象,搜索名为MATERIAL.001,MATERIAL.002 ...的材质,并替换为母版

Cocos2d replaceScene 不释放旧场景

Charles 替换 接口响应信息