基础概念介绍——导演、场景、层、精灵

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

每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程,游戏流程的管理由Director来执行,其基本框架类图如下:

导演(Director)

一款游戏好比一部电影,只是游戏具有更强的交互性,不过它们的基本原理是一致的。所以在Cocos2dx中把统筹游戏大局的类抽象为导演(Director),Director是整个cocos2dx引擎的核心,是整个游戏的导航仪,游戏中的一些常用操作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的。

因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是项目里取到的director都是同一个。用getInstance() 方法取得Director的实例,具体的API可以参考相关文档,就不做赘述了。

场景(Scene)

Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,就像在电影中变换舞台和场地一样。场景的一个重要的作用就是流程控制的作用,我们可以通过Director的一系列方法控制游戏中不同的场景的自由切换。

下面是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层上又有上个不同的精灵。

下面是一个创建三个不同层的例子:


1

2

3

4

5

6

7

8

9

10

11

12

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);

精灵

Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下:  简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。

创建精灵的几种方式:

  • 直接创建:

1

2

auto
sprite = Sprite::create(
"HelloWorld.png");     

this->addChild(sprite,0);

  • 使用纹理来创建精灵

1

2

auto
sprite1 = Sprite::createWithTexture(TextureCache::getInstance()->addImage(
"HelloWorld.png"));

this->addChild(sprite1,
0);

  • 使用精灵帧来创建精灵

1

2

auto
sprite2=Sprite::createWithSpriteFrameName(
"HelloWorld.png");  

this->addChild(sprite2,
0);

在Cocos2dx中实现精灵显示的基本过程如下:


1

2

3

4

5

6

7

8

9

10

//创建Scene

auto
scene = Scene::create();

//创建层

auto
layer = HelloWorld::create();

//把层加入场景中

scene->addChild(layer);

//创建一个精灵

auto
sprite = Sprite::create(
"HelloWorld.png");

//把精灵加到层里

layer->addChild(sprite,
0);

时间: 2024-10-02 09:26:48

基础概念介绍——导演、场景、层、精灵的相关文章

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

rabbitmq 基础概念介绍

[引言] 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题. 消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. [RabbitMQ简介] AMQP,即Advanced Message Queuing Protocol,高级消息队列协议

Cocos2dx学习笔记3:基础概念介绍

从小到大我们玩了许许多多的游戏,从任天堂的红白机到最火的英雄联盟游戏,游戏已经越来越深入我们生活中.通过这些游戏的的解析,我们可以发现每一款游戏有着不同的游戏场景,不论是游戏机的关卡场景,还是网络游戏的地图场景,都可以算是不同的游戏场景. 一款游戏里每一个时刻都有一个场景在独立运行,通过切换不同的场景来完成一个游戏流程.而游戏流程的管理由导演(Director)来控制和执行,整个游戏一般只有一个导演,负责创建和处理主窗口,以及管理场景执行. 在游戏里,一个游戏可以由多个场景组成(菜单界面.游戏界

编译原理基础概念介绍

关于编译原理 语法树 句柄 简单短语 短语 的区分,通过两个例子来理解概念以及方法: 例子1——语法树 S -> a|b|(T)  T -> TdS|S Vt={a,b,d,(,)}.Vn={S,T},S是开始符 句型(Sd(T)db)是S的一个推导,其中___是句柄;____是最左素短语:____是该句型的直接短语,_____是短语.     素短语的概念:它是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语,所谓最左素短语就是处于句型最左边的素短语的短语.而一个算

NAND FLash基础概念介绍

一.引脚介绍 引脚名称 引脚功能 CLE 命令锁存功能 ALE 地址锁存功能 /CE 芯片使能 /RE 读使能 /WE 写使能 /WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N.C 不接 IO0~IO7 传输数据.命令.地址 1. 命令.地址.数据都通过8个I/O口传输 2. 写命令.地址.数据时,都需要将WE.CE信号同时拉低 3. 数据在WE信号的上升沿被NAND Flash锁存 4. 命令锁存信号CLE和地址锁存信号ALE用来分辨.锁存命令或地址 5. 在CLE上升沿

MQTT基础概念介绍

https://blog.csdn.net/pipinet123/article/details/60866901 源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150在MQTT群里有很多群友经常会把MQTT.MQTT Broker.MQTT Client这些概念搞混淆. 也有很多群友不知道MQTT相关产品去哪里找 还有群友将MQTT和某db.某MQ.TCP协议进行对比 鉴于部分初识MQTT朋友的疑惑,所以讲这些概念以及相关推荐写此博文,

cocos2d-x-3.6 引擎基础概念

先讲一下引擎里面几个重要的基础概念:导演,节点,场景,层,精灵.当然实际开发者会碰到很多其他概念,不过不要紧,有了这些基础概念,后面自己学习起来就容易多了. 节点(Node)是cocos2d-x里面最基础的一个类,游戏中几乎所有的类都派生自这个类,换句话说,游戏里面几乎所有的游戏对象都是一个节点.那么如何管理这些游戏对象呢,cocos2d-x引擎采用节点树来管理所有的游戏对象.看看一个游戏里面各元素的关系图.这个不是类图,可以看成是组织关系图. 一个游戏由很多个游戏场景组成,就像一个电影,每段故

控制台基础概念实例

上一篇文章 控制台基础概念 介绍了控制的基本构成,以及一些操作处理.这一部分以实际代码为主,给出控制台使用的几个例子. 以main函数作为入口函数的程序都是控制台程序,最简单的控制台程序就是Hello World的程序.这里不给出了. GUI程序可以使用以下几种方式使用控制台: 在调用CreateProcess时使用CREATE_NEW_CONSOLE标志.(默认情况下,待启动进程为控制台程序时不推荐使用该参数,因为无法确定用户输入是有哪个控制台处理的) 通过 AttachConsole函数附加

WCF分布式开发步步为赢(1):WCF分布式框架基础概念

众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都推出了自己的中间件产品,比如Oracle Fusion和 SAP NetWeaver,IBM.BEA等企业也推出了自己基于SOA的解决方案.基于J2EE平台的SOA架构设计中的一个重要概念就是EJB企业服务总线,作用是实现各个系统的数据交互.而.NET平台上,WCF就是微软为各个系统的数据交互提供通讯