Cocos2d-x开发教程 第五节 深入Scene

Cocos2d-x开发教程 第五节 深入Scene,第1张

概述         这一节我们来具体说说Scene,简单来说Scene就是一个容器,其中可以容纳Sprite、Label、Node等各种游戏中需要的对象。Scene还负责控制游戏的逻辑和内部对象的渲染,游戏中至少有一个Scene,也可以有多个Scene互相切换,并且在Scene切换的过程中还可以指定炫酷的效果。下面的代码创建了一个Scene auto dirs = Director::getInst

这一节我们来具体说说Scene,简单来说Scene就是一个容器,其中可以容纳Sprite、Label、Node等各种游戏中需要的对象。Scene还负责控制游戏的逻辑和内部对象的渲染,游戏中至少有一个Scene,也可以有多个Scene互相切换,并且在Scene切换的过程中还可以指定炫酷的效果。下面的代码创建了一个Scene

auto dirs = Director::getInstance();Size visibleSize = dirs->getVisibleSize();Vec2 origin = dirs->getVisibleOrigin();scene1 = Scene::create();auto nodeItems = Node::create();nodeItems->setname("nodeItems");auto menuNode = Node::create();menuNode->setname("menuNode");int index = 2;auto thisSceneLabel = Label::createWithTTF("This Is A Scene","Marker Felt.ttf",32);thisSceneLabel->setposition(Vec2(visibleSize.wIDth / 2,visibleSize.height / 2));scene1->addChild(thisSceneLabel,1);auto menuItem1 = MenuItemFont::create("Make A New Scene");menuItem1->setFontnameObj("Marker Felt.ttf");menuItem1->setFontSizeObj(32);menuItem1->setname("menuItem1");menuItem1->setposition(Vec2(origin.x + visibleSize.wIDth / 2,origin.y + visibleSize.height / 2).x,(Vec2(origin.x + visibleSize.wIDth / 2,origin.y + visibleSize.height).y - (index) * 40));menuItem1->setCallback([&](cocos2d::Ref *sender) {	Director::getInstance()->replaceScene(createScene2());});auto menu = Menu::create(menuItem1,NulL);menu->setname("menu");menuNode->addChild(menu,1);menu->setposition(Vec2::ZERO);scene1->addChild(menuNode,2);
创建结果如下

第24、25、26行设置了菜单的回调函数,当点击菜单时就会执行替换Scene的 *** 作。replaceScene函数用于直接替换Scene,不添加任何效果。替换效果如下

创建这个Scene的代码如下

auto dirs = Director::getInstance();Size visibleSize = dirs->getVisibleSize();Vec2 origin = dirs->getVisibleOrigin();scene2 = Scene::create();scene2->retain();auto nodeItems = Node::create();nodeItems->setname("nodeItems");auto menuNode = Node::create();menuNode->setname("menuNode");int index = 2;auto thisSceneLabel = Label::createWithTTF("This Is A New Scene",visibleSize.height / 2));scene2->addChild(thisSceneLabel,1);auto menuItem1 = MenuItemFont::create("Make a New Scene Using a Transition Fade");menuItem1->setFontnameObj("Marker Felt.ttf");menuItem1->setFontSizeObj(32);menuItem1->setname("menuItem1");menuItem1->setposition(Vec2(origin.x + visibleSize.wIDth / 2,origin.y + visibleSize.height).y - (index)* 40));menuItem1->setCallback([&](cocos2d::Ref *sender) {	Director::getInstance()->replaceScene(TransitionFade::create(0.5,createScene3(),color3B(0,255,255)));});auto menu = Menu::create(menuItem1,1);menu->setposition(Vec2::ZERO);scene2->addChild(menuNode,2);return scene2;
注意27行菜单回调函数的内容,这里使用了TransitionFade::create来创建了一个0.5秒长的渐变褪色效果,点击菜单效果如下


创建这个Scene的代码如下

auto dirs = Director::getInstance();Size visibleSize = dirs->getVisibleSize();Vec2 origin = dirs->getVisibleOrigin();scene3 = Scene::create();scene3->retain();auto nodeItems = Node::create();nodeItems->setname("nodeItems");auto menuNode = Node::create();menuNode->setname("menuNode");int index = 2;auto thisSceneLabel = Label::createWithTTF("This Scene used a Transition!",visibleSize.height / 2));scene3->addChild(thisSceneLabel,1);auto menuItem1 = MenuItemFont::create("Make a New Scene Using a Flip");menuItem1->setFontnameObj("Marker Felt.ttf");menuItem1->setFontSizeObj(32);menuItem1->setname("menuItem1");menuItem1->setposition(Vec2(origin.x + visibleSize.wIDth / 2,origin.y + visibleSize.height).y - (index)* 40));menuItem1->setCallback([&](cocos2d::Ref *sender) {	Director::getInstance()->replaceScene(TransitionFlipX::create(2,createScene4()));});auto menu = Menu::create(menuItem1,1);menu->setposition(Vec2::ZERO);scene3->addChild(menuNode,2);return scene3;
在27行的菜单回调函数中使用TransitionFlipX::create函数创建了一个2秒的翻转效果,点击菜单执行效果如下


除了上面介绍的3种切换Scene的方法,还有如下方法来用于切换Scene。

TransitionSlIDeInT::create用来创上下欢动切换效果。

pushScene用于把已经存在的Scene放到场景堆栈中,之后可以用popScene把场景堆栈中的Scene取出。

下一节我们将讲述其它和UI有关的部分。

总结

以上是内存溢出为你收集整理的Cocos2d-x开发教程 第五节 深入Scene全部内容,希望文章能够帮你解决Cocos2d-x开发教程 第五节 深入Scene所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1067362.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存