Chr*_*ano 2 iphone macos objective-c cocos2d-iphone ios
我有一个我开发的游戏,有三个场景:暂停菜单,主屏幕菜单和游戏本身.在游戏过程中,当游戏暂停时,它会显示暂停场景:
[[CCDirector sharedDirector] pushScene:[PauseScene node]];
从暂停场景中,有三个选项:重启,恢复,主菜单.点击恢复时,它只会弹出暂停场景并返回游戏场景以恢复游戏.当点击主菜单时,它将游戏场景保持在背景中,并且从主菜单屏幕,游戏玩法仍然在运行.到目前为止,经过大量的研究,我还没有找到一种方法将popScene(几乎从RAM中踢出)从任何场景开始玩游戏场景,但游戏场景.从暂停屏幕,我可以使用:
[[CCDirector sharedDirector] popScene];
摆脱暂停场景,如果我从游戏场景中的方法运行该代码,我可以摆脱那个游戏玩法的实例,但我需要一种方法来popScene在后台运行的游戏玩法节点暂停节点.总的来说,基本问题是:如何从另一个场景中弹出Cocos2d中的特定场景?
在Cocos2d中有两个主要功能可以改变场景: pushScene/ popScene和replaceScene.
pushScene:
- (void)pushScene:(CCScene*)场景
暂停正在运行的场景的执行,将其推送到暂停场景的堆栈上.新场景将被执行.尽量避免大量推送场景以减少内存分配.如果有正在运行的场景,只能调用它.
此功能使用堆栈.它将所有场景存储在后进先出(LIFO)数据结构中.基本上它覆盖了场景并按照它们来的相反顺序删除它们.这可能是你想要"推"(或调出)暂停菜单,然后"弹出"(删除)暂停场景,然后恢复游戏.
要返回图层,只需调用popScene:
- (void)popScene
弹出队列中的场景.这个场景将取代正在运行的场景.正在运行的场景将被删除.如果堆栈中没有更多场景,则终止执行.如果有正在运行的场景,只能调用它.
另一种选择,我相信你会想要的,是replaceScene.这将停止当前正在运行的场景并将其替换为全新场景.这可能是你想要结束游戏或第一次从原始主菜单转换到游戏玩法的想法:
- (void)replaceScene:(CCScene*)场景
用新的替换正在运行的场景.正在运行的场景已终止.如果有正在运行的场景,只能调用它
*请记住:pushScene谨慎使用.它将所有场景存储在内存中,以便以后可以弹出堆栈.所以不要存储太多场景而忘记它们.
**来源:cocos2D网站
编辑1:
你有几个选择.请记住,replaceScene只替换当前运行的场景,通常是您要使用的场景.它不会"清除"整个场景堆栈,因此通常很少使用pushScene/ popScene.在下面的演示中,我向您展示了两者的问题.但是,我确实尽可能地节省内存.
使用push/popScene:
1.开始使用主屏幕运行.
2.当用户单击"播放"按钮时,用于replaceScene停止主屏幕场景并开始运行游戏场景(请记住,主屏幕将不再运行或保存在内存中的任何位置.如果必须记住任何信息然后将其保存到堆栈中pushScene.我这样做的原因是因为主屏幕每次都可能是相同的,并且在我们玩的时候不需要继续运行).
3.用户现在可以玩一点.然后他们想停下来休息一下.他们点击"暂停"按钮.然后使用pushScene保存Game Play场景的当前状态并开始运行Pause Menu场景.(游戏玩法可以"暂停").您的堆栈现在看起来像这样:
//Bottom ----------------------> Top
[Game Play scene], [Pause Menu Scene]
暂停一段时间后,他们可以用来pushScene从内存中删除暂停菜单场景,并加载"暂停"的游戏场景并立即恢复播放.
如果你想从暂停 - >主菜单进入,问题就变成了.如果您刚刚使用replaceScene暂停菜单,那么旧游戏将留在内存中.您需要找到一种清除旧游戏场景的方法.
另一个选项必须是保持Home Screen pushScene,然后将其保存在堆栈中,然后弹出两次.这通常会导致我的体验"跳跃"过渡.
首选方法往往是:创建一个Singleton类,并在暂停时保存内存.(Singleton类只是一个只有一个实例的类.它基本上是我们的"当前游戏状态"数据.我推荐这个版本.)
使用替换场景:
1.开始使用主屏幕运行.
2.当用户单击"播放"按钮时,用于replaceScene停止主屏幕场景并开始运行游戏场景(请记住,主屏幕将不再运行或保存在内存中的任何位置.如果必须记住任何信息,然后有一段Singleton Class主屏幕数据).
3.用户现在可以玩一点.然后他们想停下来休息一下.他们点击"暂停"按钮.立即"暂停"你的游戏,并将所有必要的精灵,游戏逻辑等保存到Singleton Class,然后用于replaceScene退出游戏场景并加载暂停场景.然后根据他们的选择,你可以继续游戏(第4步),或者转到主屏幕(第5步)
4. 从"暂停"菜单中删除渲染游戏所需的一切,Singleton Class然后replaceScene退出游戏播放场景.
5. replaceScene使用从暂停菜单退出并加载主屏幕.
| 归档时间: |
|
| 查看次数: |
2673 次 |
| 最近记录: |