cocos2dx 导演、场景、层、精灵

cocos2dx 导演、场景、层、精灵,第1张

概述原文地址:http://www.voidcn.com/article/p-wqljmrkq-xv.html 在Cocos2d-x-3.0x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于节点类Node)。可以执行Action来修改游戏节点的属性,使其移动、旋转、放大、缩小等等

原文地址:http://www.jb51.cc/article/p-wqljmrkq-xv.html

在cocos2d-x-3.0x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,一个场景又可以分为不同的层,一个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于节点类Node)。可以执行Action来修改游戏节点的属性,使其移动、旋转、放大、缩小等等。
每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程,游戏流程的管理由Director来执行,其基本框架类图如下:



1. 导演

Director是整个cocos2dx引擎的核心,是整个游戏的导航仪,游戏中的一些常用 *** 作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的。
因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是项目里取到的director都是同一个。用getInstance() 方法取得Director的实例。

Director控制场景的常用方法:
runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。

pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;

replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。

popScene() 释放当前场景,再从代码执行场景中d出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用

end() 释放和终止执行场景,同时退出应用

pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上

resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上

2. 场景

Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,就像在电影中变换舞台和场地一样。同时场景是层的容器,包含了所有需要显示的游戏元素。

3. 层

Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。例如横屏打斗游戏,人物向前行走的过程中,背景会不断地滚动,但是游戏的控制按钮永远在固定的位置不变。要向场景添加层,我们可以使用addChild方法。
addChild( Node * child )
addChild( Node *child,int zOrder )
addChild( Node *child,int zOrder,int tag )

其中,Child参数就是节点。对于场景而言,通常我们添加的节点就是层。先添加的层会被置于后添加的层之下。如果需要为它们指定先后次序,可以使用不同的zOrder值。tag是元素的标识号码,如果为子节点设置了tag值,就可以在它的父节点中利用tag值就可以找到它了。层可以包含任何Node作为子节点,包括Sprites(精灵),Labels(标签),甚至其他的Layer对象。

[HTML] view plain copy print ? autolayer=Layercolor::create(color4B(0,128,255)); layer->setContentSize(CCSizeMake(120,80)); layer->setposition(Point(50,50)); addChild(layer,10); autolayer1=Layercolor::create(color4B(128,108); List-style:decimal-leading-zero outsIDe; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> layer1- layer1->setposition(Point(100,80)); addChild(layer1,20); autolayer2=Layercolor::create(color4B(128,108); List-style:decimal-leading-zero outsIDe; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> layer2- layer2->setposition(Point(150,110)); addChild(layer2,30); 4. 精灵

Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。

创建精灵的几种方式:

直接创建:

copy
autosprite=Sprite::create("HelloWorld.png"); this->addChild(sprite,0);


使用纹理来创建精灵 copy
autosprite1=Sprite::createWithTexture(TextureCache::getInstance()->addImage("HelloWorld.png")); >addChild(sprite1,0);

使用精灵帧来创建精灵 copy
autosprite2=Sprite::createWithSpriteFramename("HelloWorld.png");   >addChild(sprite2,0);
>>> 总结

以上是内存溢出为你收集整理的cocos2dx 导演、场景、层、精灵全部内容,希望文章能够帮你解决cocos2dx 导演、场景、层、精灵所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1080513.html

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

发表评论

登录后才能评论

评论列表(0条)

保存