我正在使用Cocos2d-x创建游戏。我当前正在创建一个游戏结束菜单,在该菜单中,我需要能够同时切换到我的菜单场景和我的游戏场景(当我说切换到游戏场景时,我实际上仅表示“重新启动”游戏)。但是循环依赖关系使我无法做到这一点。
MenuScene需要能够使用GameScene::create()
以切换到gamescene和GAMEOVER菜单需要能够使用两个GameScene::create() or its restart funtion
和MenuScene::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的文件中:))。
将函数指针存储在GameOverScene.h中,以指向MainGameScene中的重置方法:
std::function<void()> _resetCallback;
在使用GameOverScene运行之前,请从主要游戏场景中设置函数指针。
auto gameOverScene = GameOverScene::createGameOverScene();
gameOverScene->setResetCallback(std::bind(&MainGameScene::reset, this));
单击重置按钮后,调用_resetCallback
void GameOverScene::onResetClicked(Ref* sender)
{
_resetCallback();
}
这将为您提供设置所需内容以及删除循环依赖所需的所有功能。我以前已经使用过这种方法很多次,并且始终有效。让我知道此解决方案是否适合您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句