gpt4 book ai didi

iphone - 如何从另一个场景中弹出特定的Cocos2D场景?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:17:54 24 4
gpt4 key购买 nike

我有一个自己开发的游戏,共有三个场景:暂停菜单,主屏幕菜单和游戏本身。在游戏过程中,当游戏暂停时,它将通过以下方式显示暂停场景:
[[CCDirector sharedDirector] pushScene:[PauseScene node]];
在暂停场景中,有三个选项:重新启动,继续,主菜单。当单击恢复时,它只是弹出暂停场景并返回到游戏场景以恢复游戏性。单击主菜单时,它将游戏场景保留在背景中,并且在主菜单屏幕上,游戏仍在运行。到目前为止,经过大量研究,我无法找到一种方法将popScene(几乎从RAM中踢出)从游戏场景之外的任何场景中移除。在暂停屏幕上,我可以使用:
[[CCDirector sharedDirector] popScene];
摆脱暂停场景,并且如果我从游戏场景上的方法运行该代码,则可以摆脱游戏实例,但是我需要一种方法来从后台弹出运行在后台的游戏节点。暂停节点。总体而言,基本问题是:如何从另一个场景弹出Cocos2d中的特定场景?

最佳答案

在Cocos2d中,有两个主要功能可以更改场景:pushScene / popScenereplaceScene

  • 第一个是pushScene:


  • (void)pushScene:(CCScene *)场景


  • 暂停运行场景的执行,将其压入堆栈
    暂停的场景。新场景将被执行。尽量避免大
    堆栈的推送场景以减少内存分配。仅在以下情况下调用
    有一个正在运行的场景。

    此函数使用 stack。它将所有场景存储在 Last In-First Out (LIFO)数据结构中。基本上,它会覆盖场景并以与场景相反的顺序将其删除。这可能是您想要“按下”(或调出)暂停菜单,然后“弹出”(移除)暂停场景然后恢复游戏的原因。

    要返回图层,您只需调用 popScene:


  • (void)popScene


  • 从队列中弹出一个场景。该场景将取代跑步
    之一。正在运行的场景将被删除。如果没有更多的场景
    堆栈执行终止。仅在有
    运行场景。

    2.我相信您想要的另一个选项是 replaceScene。这将停止当前正在运行的场景,并将其替换为一个全新的场景。这可能是您想要结束游戏或首次从原始主菜单过渡到游戏玩法的条件:


  • (void)replaceScene:(CCScene *)场景


  • 用新场景替换正在运行的场景。正在运行的场景是
    终止。仅在有正在运行的场景时调用它

    *请紧记:谨慎使用 pushScene。它将所有场景存储在内存中,以便以后可以将它们弹出堆栈。因此,不要存储太多的场景而忘记它们。

    **来源: cocos2D website

    编辑1:

    您有几种选择。请记住, replaceScene仅替换当前正在运行的场景,通常是您要使用的场景。它不会“清除”整个场景堆栈,因此通常您很少希望使用 pushScene / popScene。在下面的演示中,我将向您展示这两个问题。但是,我会尽力节省内存。

    使用push / popScene:

    1.从主屏幕开始运行。

    2.当用户单击“播放”按钮时,使用 replaceScene停止主屏幕场景并开始运行游戏场景(请记住,主屏幕将不再运行或保存在内存中的任何位置。如果必须记住任何内容信息,然后使用 pushScene将其保存到堆栈中。之所以这样做,是因为主屏幕每次可能都相同,并且在播放时无需继续运行。

    3.用户现在可以玩了一点。然后他们想暂停洗手间。他们单击“暂停”按钮。然后使用 pushScene保存游戏场景的当前状态并开始运行“暂停菜单”场景。 (可以这么说,游戏是“暂停的”)。
    您的堆栈现在看起来像这样:
    //Bottom ----------------------> Top [Game Play scene], [Pause Menu Scene]
    4.稍稍暂停后,他们可以使用 pushScene从内存中删除“暂停菜单”场景,并加载“暂停”的游戏场景,并立即恢复播放。

    那么问题就变成了,如果您想从暂停->主菜单转到该怎么办。如果您只是在“暂停”菜单上使用了 replaceScene,则旧游戏将在内存中徘徊。您需要找到一种清除旧游戏场景的方法。

    另一个选择是必须保留主屏幕,方法是使用 pushScene将其保留在堆栈中,然后弹出两次。根据我的经验,这通常会导致“跳跃”过渡。

    首选方法是:创建一个 Singleton Class并在暂停时保存内存。 (单例类只是一个只有一个实例的类。它基本上是我们的“当前游戏状态”数据。我推荐使用此t utorial。)

    使用替换场景:

    1.从主屏幕开始运行。

    2.当用户单击“播放”按钮时,使用 replaceScene停止主屏幕场景并开始运行游戏场景(请记住,主屏幕将不再运行或保存在内存中的任何位置。如果必须记住任何内容信息,然后在 Singleton Class的一部分中显示主屏幕数据)。

    3.用户现在可以玩了一点。然后他们想暂停洗手间。他们单击“暂停”按钮。立即“暂停”您的游戏并将所有必要的精灵,游戏逻辑等保存到 Singleton Class,然后使用 replaceScene退出“游戏”场景并加载“暂停”场景。然后根据他们的选择,继续播放(第4步),或转到主屏幕(第5步)

    4.从 Singleton ClassreplaceScene重新加载渲染游戏所需的所有内容,以从“暂停”菜单中退出并加载游戏场景。

    5.使用 replaceScene从“暂停”菜单退出并加载主屏幕。

    关于iphone - 如何从另一个场景中弹出特定的Cocos2D场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16877759/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com