Cocos2d-x学习笔记
Cocos2d-x 核心概念
导演
导演类Director用于管理场景对象,采用单例设计模式,在整个工程中只有一个实例对象。
导演对象职责如下:
- 访问和改变场景;
- 访问Cocos2d-x的配置信息;
- 暂停、继续和停止游戏;
- 转换坐标。
场景
场景类Scene是构成游戏的界面,类似于电影中的场景。
场景大致可以分为以下几类:
- 展示场景类:播放视频或简单的在图像上输出文字,来实现游戏的开场介绍、胜利和失败提示、帮助介绍。
- 选项场景类:主菜单、设置游戏参数等。
- 游戏场景:这是游戏的主要内容。
层
Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。通常,层中的对象功能类似,耦合较紧,与层中游戏内容相关的逻辑代码也编写在层中,在组织好层后,只需要把层按照顺序添加到场景中就可以显示出来了。
Node
定义
Cocos2d-x采用层级(树形)管理场景、层、精灵、菜单、文本、地图和粒子系统等节点(Node)对象。一个场景可以包含多个层,层级结构中的节点可是场景、层、精灵、菜单、文本、地图和粒子系统等任何对象。
Node中重要操作
- 创建节点:
Node * ChildNode = Node::create()
。 - 增加新的子节点:
node->addChild(childNode, 0, 123)
,第二个参数Z轴绘制顺序,第三个参数是标签。 - 查找子节点:
Node *node = node->getChildByTag(123)
,用过标签查找子节点。 node->removeChildByTag(123, true)
通过标签删除子节点,并停止所有该节点上的一切动作。node->removeChild(ChildNode, true)
删除childNode节点,并停止所有子节点,并停止这些子节点上的一切动作。node->removeAllChildrenWithCleanup(true)
删除node节点的所有子节点,并停止这些子节点上的一切动作。node->removeFromParentAndCleanup(ture)
从父节点删除node节点,并停止所有该节点上的一切动作。
Node中重要属性
- position:Node对象的实际位置。
- anchorPoint:相对于position的比例。
游戏循环与调度
导演对象来管理和维护每个游戏程序中的不停的循环,使用定时器(Scheduler)对精灵等对象的运行进行调度。因为Node类封装了Scheduler类,所以也可以直接使用Node中的定时器相关函数。
Node中的定时器相关函数主要有:
void schedulerUpdate(void)
:每个Node对象只要调用该函数,那么这个Node对象就会定时地每帧回调一次自己的update(float dt)函数。void schedule(SEL_SCHEDULE selector, float interval)
:与scheduldUpdate函数功能一样,不同的是我们可以指定回调函数,也可以指定回调间隔。void unscheduleUpdate(void)
:停止update(float dt)
函数调度。void unschedule(SEL_SCHEDULE selector)
:可以指定具体函数停止调度。void unscheduleAllSelector(void)
:可以停止调度。
Cocos2d-x坐标系
UI坐标
UI坐标是二维坐标,原点是在左上角,x轴向右位正,y轴向下位正。
OpenGL坐标
Cocos2d-x默认采用OpenGL,是三维坐标,是右手坐标系。