Cocos2d-导演、场景、层、精灵
来源:互联网 发布:郑钧灰姑娘 知乎 编辑:程序博客网 时间:2024/05/03 10:15
Cocos2d-x-3.x引擎中,采用节点树形结构来管理游戏对象,一个游戏可以划分为不同的场景,每个场景可以划分为不同的层,每个层又可以拥有任意个可见的游戏节点(即对象,游戏中基本上所有的类都派生于节点类Node),通过执行Action来修改游戏节点的属性,使其移动、旋转、放大等等。
每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程,游戏流程的管理由Director来执行,基本框架类图为:
导演(Director)
Director是整个Cocos2dx引擎的核心,是整个游戏的导航仪。
Director作为整个游戏的总导演,会经常调用一些控制,所以采用了单件设计模式,也就是项目里面渠道的Director都是同一个,用getInstance()方法可以获得Director实例。
场景(Scene)
场景的一个重要的作用就是流程控制的作用,Director控制场景的常用方法:
runWithScene( Scene *scene ) 启动游戏,并运行scene场景。本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene–>startAnimation。
pushScene( Scene *scene ) 将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景,只有存在正在运行的场景时才调用该方法;
replaceScene( Scene *scene ) 直接使用传入的scene替换当前场景来切换画面,当前场景被释放。这是切换场景时最常用的方法。
popScene() 释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用
end() 释放和终止执行场景,同时退出应用
pause() 暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
resume () 恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上
场景是层的容器,包含了所有需要显示的游戏元素,当完成一个场景的时候,会创建一个Scene的子类,并在子类中实现初始化载入游戏资源,为场景添加层,启动音乐播放等。
层(Layer)
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对象。
HelloWorldScene的场景中有三个不同层,在layer3层上又有上个不同的精灵。
一个创建三个不同层的例子:
auto layer = LayerColor::create(Color4B(0, 128, 128, 255));layer->setContentSize(CCSizeMake(120, 80));layer->setPosition(Point(50, 50));addChild(layer, 10);auto layer1 = LayerColor::create(Color4B(128, 0, 128, 255));layer1->setContentSize(CCSizeMake(120, 80));layer1->setPosition(Point(100, 80));addChild(layer1, 20);auto layer2 = LayerColor::create(Color4B(128, 128, 0, 255));layer2->setContentSize(CCSizeMake(120, 80));layer2->setPosition(Point(150, 110));addChild(layer2, 30);
精灵(Sprite)
Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。
简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。
直接创建
auto sprite = Sprite::create("HelloWorld.png"); this->addChild(sprite,0);
使用纹理创建
auto sprite1 = Sprite::createWithTexture(TextureCache::getInstance()->addImage("HelloWorld.png")); this->addChild(sprite1, 0);
使用精灵帧创建
auto sprite2=Sprite::createWithSpriteFrameName("HelloWorld.png"); this->addChild(sprite2, 0);
具体使用
//创建Sceneauto scene = Scene::create();//创建层auto layer = HelloWorld::create();//把层加入场景中scene->addChild(layer);//创建一个精灵auto sprite = Sprite::create("HelloWorld.png");//把精灵加到层里layer->addChild(sprite, 0);
- Cocos2d-导演、场景、层、精灵
- cocos2d-x 基础--导演,场景,层,精灵
- cocos2d-x导演,层,场景,精灵
- 导演,场景,层,精灵
- 导演、场景、层、精灵
- 导演、场景、层、精灵
- cocos2d-x:导演,场景,层,以及精灵的介绍
- cocos2d-x中的导演、场景、层和精灵
- cocos2d-x 3.0 导演,场景,层,以及精灵的介绍
- Cocos2d-x3.0导演、场景、层、精灵的使用
- cocos2d-x学习笔记【二】导演、场景、层。精灵介绍
- Cocos2d-x 场景、导演、层、精灵、菜单和节点
- Cocos2d-x 基础概念——导演、场景、层、精灵
- 02、精灵、层、场景、导演
- cocos2dx 导演、场景、层、精灵
- ocos2dx 导演,场景,层,精灵模型
- cocos2dx 导演,场景,层,精灵模型
- 【cocos2d-x官方文档】导演,场景,层,以及精灵的介绍
- 银行运维手记---2016-10-18-问题整理
- 时间复杂度
- ThreadPoolExecutor一些小结
- JFinal的Interceptor和Handler
- 微信小程序例子——使用input组件实现密码框
- Cocos2d-导演、场景、层、精灵
- HDU 2977 Color Squares BFS
- cocos-2dx中对字符串逻辑长度的简单处理
- HDU-2136-Largest prime factor(素数筛法)
- Java中Map集合详解
- Linux 下使用 objdump 反汇编
- Vundle常用命令
- php源码之路第二章第二节(SAPI概述之嵌入式)
- VideoView实现视频引导页效果