Cocos2d-X游戏开发(三)

时间:2023-02-07 21:37:00

Cocos2d-X游戏开发

  1. 节点

对象关系图:

Cocos2d-X游戏开发(三)

节点(Node)是Cocos2d-x中最重要的类,继承自Ref类,同时也是所有节点的父类。

Cocos2d-x看所有需要绘制到屏幕的对象,或是自身包含要绘制到屏幕中的对象,都继承自Node类,最常用的节点包括场景、层、精灵和菜单等,每一个节点只有一个父节点,但是可以有任意数量的子节点。

成员变量:

名称

功能

_rotationX

表示节点X轴的水平旋转的角度,节点以锚点为中心顺时针旋转一定量,单位是角度。

_rotationY

表示节点y轴的垂直旋转的角度,节点以锚点为中心顺时针旋转一定量,单位是角度。

_scaleX

表示节点X轴的缩放比例,节点以锚点为中心缩放该比例。

_scaleY

表示节点Y轴的缩放比例,节点以锚点为中心缩放该比例。

_position

表示节点在屏幕中的位置。

_skewX

表示节点X轴的倾斜解度,节点以锚点为中心,平行X轴顺时针变形,单位为角度,默认值为0

_skewY

表示节点y轴的倾斜解度,节点以锚点为中心,平行y轴逆时针变形,单位为角度,默认值为0

_anchorPoint

表示节点的锚点,用于精确地控制节点的位置和位置的变换,节点的变形和定位操作都要依据锚点来确定。

_contentSize

表示未经转换的节点内容大小,以point(点)为单位。

_globalZOrder

表示节点相对于其"兄弟"节点(拥有共同的父节点)的Z顺序值。

_children

节点的子节点数组,变量类型是Vector<Node*>.

_parent

节点的父节点,通常很少用到。变量类型是Node.

_tag

用于识别节点的标识值。

_userData

获取或设置与节点相关的额外信息,变量是一个void的指针对象,表示不确定的对象,可以是一个数据块、一个结构或一个对象等,我们可以利用这个属性来保存任何数据。

_visible

用于判断节点是否可见。

_running

当使用同样的Z值对子节点进行排序时,用该成员变量来决定子节点的顺序,不要手动更改改数值。

_orderOfArrival

用于判断当前节点是否在运行。

 

成员方法:

名称

类型

功能

virtual void addChild(Node* childNode)

处理子节点

将新节点添加为当前场景节点的子节点,z-order的值为0

virtual void addChild(Node* child,int localZOrder,int tag)

处理子节点

将新节点添加为当前场景节点的子节点并设置子节点的Z值。

virtual void addChild(Node* child,int localZOrder)

处理子节点

将新节点添加为当前场景节点的子节点并设置子节点的Z值和tag值。

Node *getChildByTag(int tag)

处理子节点

使用场景容器的tag获取子节点

virtual Vector<Node*>&getChildren()

处理子节点

获取所有子节点

virtual void removeChildByTag(int tag,bool cleanup=true)

处理子节点

通过tag删除子节点。

virtual void removeChild(Node* child, bool cleanup=true)

处理子节点

通过节点指针删除子节点。

virtual void removeAllChildern()

处理子节点

删除节点的所有子节点。

Action* runAction(Action* action)

动作

运行某个特定的动作,并返回执行的动作。

void stopAction(Action* action)

动作

从运行的动作列表中停止和删除一个特定的动作。

void stopActionByTag(int tag)

动作

根据tag值从运行的动作列表停止和删除一个特定的动作。

void stopAllActions()

动作

从运行的动作列表中停止和删除所有的动作。

Action* getActionByTag(int tag)

动作

根据tag值从运行的动作列表中获得一个特定的动作。

void scheduleUpdate()

定时器事件

启用定时器回调更新函数,该函数每一帧都会被调用。

void schedule(SEL_SCHEDULE selector,float interval)

定时器事件

如果需要根据不同的时间间隔来触发不同的定时更新逻辑,就需要指定运行特定的更新函数。

void scheduleOnce(SEL_SCHEDULE selector,float delay)

定时器事件

指定运行特定的更新函数,并设置调用的延迟时间,但只运行一次

void unscheduleUpdate()

定时器事件

停止scheduleUpdate中设置的预定更新函数update

void unscheduleUpdate(SEL_SCHEDULE selector)

定时器事件

停止指定运行的特定更新函数

virtual bool int()

其它

该函数用于初始化节点,返回bool值,表示是否成功。

virtual void onEnter()

其它

当节点所在的场景即将呈现时调用。

virtual void onExitTransitionDidStart()

其它

当节点所在场景的出场过渡效果结束后调用,如果没有过渡效果,则紧接着onExit()后被调用。

virtual void cleanup()

其它

函数用于停止所有运行中的动作和定时器函数

virtual void draw()

其它

重写该函数以绘制自己的节点

 

  1. 导演

Cocos2d-x中,把统筹游戏大局的类抽象为导演类(Director),Director是整个cocos2d-x引擎的核心,是整个游戏的导航仪。游戏中的一些常用操作就是由Director来控制的,比如OpenGL ES的初始化,场景的转换游戏暂停继续的控制,世界坐标GL坐标之间的切换,对节点的控制等,还有一些游戏数据的保存调用,屏幕尺寸的获取等都要由Director类来管理控制的。

因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是整个游戏里只有一个导演类。用getInstance()方法取得Director的实例。

//创建一个导演类的单例

Director* pDirector =Director::getInstance();

getVisibleSize获得可视区域的大小。若是设计分辨率跟屏幕尺寸一样大,则getVisibleSize便是getWinSize

getWinSize获取屏幕大小。

getVisibleOrigin:表示可视区域的起点坐标。

另外还有一个就是Node节点里面的getContentSize()函数。

getContentSize来获得节点(Node)原始的大小。只是逻辑尺寸,不是像素

 

//获取屏幕大小

autovisibleSize =Director::getInstance()->getVisibleSize();

Vec2origin =Director::getInstance()->getVisibleOrigin();

 

  1. 场景

在游戏里,场景就是关卡。关卡由人物角色和背景构成。在电影里,场景就是电影中的各种场面,各种场面主要由人物活动和背景等构成。而在Cocos2d-x 引擎中,场景存放的是需要渲染的布景,任务角色和菜单,它可以作为一个整体,一起渲染,一起销毁,一起被场景切换使用。

即游戏关卡的实施者,其管理这多个Layer,进行场景展现,相关业务逻辑的处理等;

一个场景就是一个界面,定义了所显示的所有角色图层信息

Scene(场景)是一个抽象的概念,仅被用作Node(节点)的一个子类。Scene(场景)和Node(节点)几乎相同,不同的是Scene的默认锚点在屏幕的中心。现在 scene 没有其它的逻辑,不需要我们做太多的操作及处理,更多的操作处理基本都是在布景层上完成。

    //创建场景

    autoscene =Scene::create();

    //创建图层对象

    autolayer =StartLayer::create();

    //将图层添加到场景

    scene->addChild(layer);

 

  1. 图层

Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸、键盘输入等。我们需要在层中加入Sprite(精灵)、文本标签或者其它游戏元素,并设置游戏元素的属性,比如位置、方向和大小;设置游戏元素的动作等。在我们设计好层以后,只需要把层按照顺序添加到场景中就可以显示出来了。一个场景中有多个可以交互的图层,每层显示不同的角色信息,Layer层一方面作为容器使用,另一方面处理相关事件的响应(如触摸点击、用户输入等)。

//创建一个层

auto layer =StartLayer::create();