我正在使用Cocos2d-x创建游戏。我正在创建一个游戏菜单,在该菜单中我需要能够切换到我的menucene和我的gamecene(当我说切换到gamescene我只是意味着“重启”游戏)。但循环依赖使我无法做到这一点
MenuScene需要能够使用GameScene::create()
才能切换到gamescene,并且gameover菜单需要能够同时使用GameScene::create() or its restart funtion
和MenuScene::create()
,这会给我带来循环依赖性问题<登记/>
我不能将我的gameover菜单分成它自己的文件,因为我仍然需要GameScene依赖,而GameScene需要gameover。
我无法将它们组合起来,因为GameScene需要依赖于MenuScene
所以我的问题是:我如何在cocos2d-x c ++中的两个场景之间交替。
我在Director上阅读过有关push和popnig场景的内容,但我真的不明白它是如何工作的,或者我是否可以将它用于我的目的。
先感谢您!
编辑:
现在我考虑一下,在切换到GameScene之前,我是否可以将mMenuScene推送到Director?如果我正确理解推/弹机制,那应该有用。
答案 0 :(得分:2)
我认为你可能会误解这是多么复杂,使用我在下面提供的方式可以而且肯定会将你的游戏场景分割成自己的文件。
场景替换很简单,只需使用下面的代码:
包含您的文件:
#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中的reset方法中:
std::function<void()> _resetCallback;
在使用GameOverScene运行之前,从主游戏场景设置您的函数指针。
auto gameOverScene = GameOverScene::createGameOverScene();
gameOverScene->setResetCallback(std::bind(&MainGameScene::reset, this));
单击重置按钮后,调用_resetCallback
void GameOverScene::onResetClicked(Ref* sender)
{
_resetCallback();
}
这应该为您提供设置所需内容所需的所有功能,以及删除您拥有的循环依赖项。我之前已经多次使用这种方式,它总是有效。如果此解决方案适合您,请告诉我。