您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x Programmers Guide v3.3 译本和阅读笔记(第5章:创建和转换场景)

2015-11-12 10:06 381 查看
原著是英文,本文只是一个个人的简单理解的中文的非正式翻译,供自己学习使用,参考需谨慎。

向原著的作者SlackMoehrle, Ricardo, Justin, Nite , Kai, Minggo, Wenhai, Tony, Yingtao, Rao 致敬。

第5章:创建和转换场景(Scenes)

什么是场景?

游戏中的场景是精灵(Sprites),标签(Labels),节点(Nodes)和其他对象的一个容器。场景以帧为基础控制逻辑和渲染。你至少需要一个场景来开始你的游戏。你可以把这看成是一个电影。场景上的事物就是用户看到的正在发生的事物。你可以建立任意数量的场景,并且非常容易的完成他们之间的切换。Cocos2d-x提供了场景转换和一些非常酷的转换效果。

创建场景

这个非常容易

auto myScene = Scene:create();


还记得场景图形(Scene Graph)么?

在本书的第2章,我们学习了关于场景图形的知识,并且知道了他是如何影响游戏的图形绘制工作。它决定了GUI图形的绘制顺序这一点非常重要。z-order也非常重要!

一个简单的场景

我们来建立一个简单的场景。记住,Cocos2d-x使用的是右手坐标系。这就以为着 屏幕/显示区域 左下角是坐标的原点。当你开始设定你游戏元素的位置的时候,这里就是你计算的原点。我们来创建一个简单的场景并向上面添加一些元素。

auto dirs = Director::getInstance();
Size = visibleSize = dirs->getVisibleSize();

auto myScene = Scene:create();

auto label1 = Label:createWithTTF("My Game","Marker Felt.ttf", 36);
label1->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));

myScene->addChild(label1);

auto sprite1 = Sprite::create("mysprite.png");
sprite1->setPosition(Vec2(100, 100));

myScene->addChild(sprite1);


当我们运行这段代码的时候,我们看到一个场景,上面有一个标签和一个精灵。虽然没有其他的操作,但是这是一个开始。

两个场景之间的转换

在游戏中有时需要完成两个场景的转换。可能是游戏的开始,关卡的改变或者是游戏结束。Cocos2d-x提供了一些场景转换的方法。

场景转换方法

这里有不少场景转换的方法,每一种都有不同的功能,我们一起看一下:

auto myScene = Scene::create();


runWithScene - 这个方法只在第一次使用。这个方法能够启动你的第一个游戏场景。

Director::getInstance()->runWithScene(myScene);


replaceScene - 立刻替换场景。

Director::getInstance()->replaceScene(myScene);


pushScene - 挂起正在运行的场景。将当前场景压入一个挂起场景的栈中。只有当前有正在运行的场景才能调用这个方法。

Director::getInstance()->pushScene(myScene);


popScene - 这个场景将会替换正在运行的场景。正在运行的场景将会被删除。只有当前有场景正在运行才能调用这个方法。

Director::getInstance()->popScene(myScene);


场景转换效果

你可以为你的场景转换添加视觉效果

auto myScene = Scene::create();

//Transition Fade
Director::getInstance()->replaceScene(TransitionFade::create(0.5), myScene, Color3B(0, 255, 255));

//FlipX
Director::getInstance()->replaceScene(TransitionFlipX::create(2, myScene));

//Transition Slide In
Director::getInstance()->replaceScene(TransitionSlideInT::create(1, myScene));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x 游戏 场景