【问题标题】:How to alternate between two scenes in cocos2d-x?cocos2d-x中两个场景如何切换?
【发布时间】:2015-10-18 15:02:42
【问题描述】:


我正在使用 Cocos2d-x 创建游戏。我目前正在创建一个游戏结束菜单,在该菜单中我需要能够切换到我的菜单场景和我的游戏场景(当我说切换到游戏场景时,我真的只是指“重新启动”游戏)。但是循环依赖使我无法做到这一点。
MenuScene 需要能够使用GameScene::create() 才能切换到游戏场景,并且游戏结束菜单需要能够同时使用GameScene::create() or its restart funtionMenuScene::create() 这给了我循环依赖问题
我无法将我的游戏结束菜单与其自己的文件分开,因为我仍然需要 GameScene 依赖项,而 GameScene 需要游戏结束。
我无法将它们组合为 GameScene,然后需要依赖 MenuScene

所以我的问题是:如何在 cocos2d-x c++ 中的两个场景之间切换。

我在某个地方读到过关于 Director 中的推和 popnig 场景,但我真的不明白它是如何工作的,或者我是否可以将其用于我的目的。
先感谢您!

编辑:
现在想想,在切换到 GameScene 之前,我能不能不直接将 mMenuScene 推到 Director 上?如果我正确理解了推送/弹出机制,那应该可以工作。

【问题讨论】:

    标签: c++ cocos2d-x cocos2d-x-3.0 scene


    【解决方案1】:

    我认为您可能对这有多复杂有误解,使用我在下面提供的方式可以而且应该绝对将您的游戏场景拆分为自己的文件。

    场景替换很简单,只需使用以下代码:

    包括您的文件:

    #include "MainGameScene.h"
    

    在 onClickListener 中创建和切换场景:

    auto gameOverScene = GameOverScene::createScene();
    
    // use code below for hard replace
    Director::getInstance()->replaceScene(gameOverScene );
    
    // or use code below for transition fade replace
    Director::getInstance()->replaceScene(TransitionFade::create(1, gameOverScene , Color3B(255, 255, 255)));
    

    至于重启功能。我通常会在单击重新启动按钮时调用我的游戏结束场景的回调。并不是说我曾经将我的场景完全换成手机游戏的场景,但无论如何我仍然会这样做。所以让我们做一些步骤(这假设你将你的游戏场景分离到它自己的名为 GameOverScene 的文件中:))。

    1. 在您的 GameOverScene.h 中存储一个指向 MainGameScene 中的重置方法的函数指针:

      std::function<void()> _resetCallback;
      
    2. 在使用 GameOverScene 运行之前,从主游戏场景设置函数指针。

      auto gameOverScene = GameOverScene::createGameOverScene();
      gameOverScene->setResetCallback(std::bind(&MainGameScene::reset, this));
      
    3. 当你的重置按钮被点击时,调用_resetCallback

      void GameOverScene::onResetClicked(Ref* sender)
      {
        _resetCallback();
      }
      

    这应该为您提供设置所需的所有功能以及删除您拥有的循环依赖项。我以前用过这种方法很多次,它总是有效的。让我知道此解决方案是否适合您。

    【讨论】:

    • 如果我希望能够在菜单场景和游戏场景之间切换,这将如何工作?你的意思是我把它们组合成一个场景/层? (现在我想起来了,这可能不是一个坏主意)否则我想到了另一种使用函数指针的方法,你好心提醒我存在 :)
    • 在我看来,场景文件应该始终是单独的文件。这将是完全相同的。菜单必须包含 GameScene.h 的头文件,因此您将使用与我在上面列出的完全相同的代码在场景之间进行切换。我不明白为什么这与 Game-> GameOver 不同。如果它们都是分开的,您可以从任何其他导航到任何一个。你不应该把你的场景合二为一。在整体设计和一般游戏开发中,这是一个非常糟糕的主意。这将使维护和错误修复变得非常困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多