如何在cocos2d-x中的两个场景之间交替?

v_johan


我正在使用Cocos2d-x创建游戏。我当前正在创建一个游戏结束菜单,在该菜单中,我需要能够同时切换到我的菜单场景和我的游戏场景(当我说切换到游戏场景时,我实际上仅表示“重新启动”游戏)。但是循环依赖关系使我无法做到这一点。
MenuScene需要能够使用GameScene::create()以切换到gamescene和GAMEOVER菜单需要能够使用两个GameScene::create() or its restart funtionMenuScene::create()它给我的循环依赖的问题
,我不能,因为我还需要我的GAMEOVER菜单中分离到它自己的文件GameScene依赖项和GameScene将需要gameover。
我无法将它们合并为GameScene,然后需要依赖MenuScene

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

我读过一些有关Director中的推送和popnig场景的文章,但我不太了解它是如何工作的,或者我是否可以将其用于我的目的。
先感谢您!

编辑:
现在我考虑了一下,我是否可以在切换到GameScene之前不只是将mMenuScene推向Director?如果我正确理解推/弹出机制,那应该可以工作。

填充堆栈

我想您可能会误解它的复杂性,使用我在下面提供的方法,您可以并且应该绝对将您的游戏场景分解成自己的文件。

场景替换非常容易,只需使用以下代码即可:

包括您的文件:

#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();
    }
    

这将为您提供设置所需内容以及删除循环依赖所需的所有功能。我以前已经使用过这种方法很多次,并且始终有效。让我知道此解决方案是否适合您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在cocos2d中测试精灵旋转

如何在Cocos2d中并排设置两个不同的窗口

Cocos2d游戏在两个场景之间的ReplaceScene

如何在cocos2d v3.x中更改CCSprite的图像

Cocos2d x如何在不同的CCNods上同时对动作进行排序?

如何在Cocos2d iOS中播放背景音乐并了解当前播放时间?

如何在Cocos2D V3上的CCScene中检测触摸?

如何在cocos2d中对子画面进行分组以进行触摸检测?

如何在Cocos2d v3中获得某种类型的子代

如何在Cocos2d 3.0中设置切换按钮?

如何在Cocos2D iPhone中以随机的时间间隔计划或调用方法

如何在cocos2d v3.7中升级“ CCLabelBMFont :: purgeCachedData”的代码?

如何在cocos2D应用程序(iOS 6)中拍照

Cocos2d如何切换场景

如何将cocos2d V3.x中的两个CCSprite与IOS进行比较

如何从Cocos2d CCLayer中删除这些信息?

如何在cocos2d中为共享一个着色器的精灵设置不同的纹理

更改场景cocos2d

如何在不使用TexturePacker的情况下在Cocos2D中添加动画图像?

如何在两个不同的 css 动画之间交替

cocos2d 2.x 如何吞下 CCMenuItem 的触摸

如何使用自我方法Cocos2d传递2个参数

如何从我从cocos2d for Android的其他场景传递过来的场景中获取价值?

cocos2d 3.x如何处理精灵外的触摸

如何告诉cocos2d不要在CCSprite中缓存加载的图像?

Cocos2D 3.x一次仅在场景中显示一个精灵

精灵和标签之间的Cocos2D Z值

新的Cocos2D 3.x API?

如何为多个子图绘制两个交替的 x 尺度和两个交替的 y 尺度?