游戏基础元素——Cocos2d-x学习历程(八)

时间:2022-04-26 23:53:09

1.Director:导演

从字面上理解,这是一个"导演"类,Director是控制游戏流程的主要组件。CCDirector的工作确实跟导演非常类似,主要负责以下工作:

游戏呈现方面的设定,包括设定游戏呈现的窗口、FPS显示、默认帧率上限、纹理颜色位宽等。

切换当前的游戏场景,暂停或恢复游戏场景的运行。

因为Director是游戏项目的总导演,会经常调用进行一些控制,所以该Director利用了单件设计模式,也就是项目里取到的director都是同一个。

用getInstance() 方法取得Director的实例。

2.Scene:场景

Scene场景也是cocos2dx中必不可少的元素,游戏中通常我们需要构建不同的场景(至少一个),游戏里关卡、版块的切换也就是一个一个场景的切换,就像在电影中变

换舞台和场地一样。场景的一个重要的作用就是流程控制的作用,我们可以通过Director的一系列方法控制游戏中不同的场景的*切换。

下面是Director控制场景的常用方法:

  • runWithScene( Scene *scene )  启动游戏,并运行scene场景。

本方法在主程序第一次启动主场景的时候调用。如果已有正在运行的场景则不能调用该方法;会调用pushScene-->startAnimation。

  • pushScene( Scene *scene )  将当前运行中的场景暂停并压入到代码执行场景栈中,再将传入的scene设置为当前运行场景。

只有存在正在运行的场景时才调用该方法;

  • replaceScene( Scene *scene )  直接使用传入的scene替换当前场景来切换画面,当前场景被释放。

这是切换场景时最常用的方法。

  • popScene()  释放当前场景,再从代码执行场景中弹出栈顶的场景,并将其设置为当前运行场景。

如果栈为空,直接结束应用。和PushScene结对使用。

  • end()  释放和终止执行场景,同时退出应用
  • pause()  暂停当前运行场景中的所有计时器和动作,场景仍然会显示在屏幕上
  • resume ()  恢复当前运行场景的所有计时器和动作,场景仍然会显示在屏幕上

值得注意的一点是,以上三种切换场景的方法(replaceScene、pushScene、popScene)均是先将待切换的场景完全加载完毕后,才将当前运行的场景释放掉。所以,在新场景恰好完全加载完毕的瞬间,系统中同时存在着两个场景,这将是对内存的一个考验,若不注意的话,切换场景可能会造成内存不足。

通常,场景之间需要一定的过渡衔接效果,否则,场景的切换会显得十分突兀。为此,Cocos2d-x提供了很多华丽的场景切换特效,例如翻页、波浪、淡出淡入等。这些特效是通过派生自CCScene的CCTransitionScene系列特效类来实现的。我们也可以模仿Cocos2d-x内置的场景切换特效代码,来编写属于自己的特效。

3.Layer:层

Layer是处理玩家事件响应的Node子类。与场景不同,层通常包含的是直接在屏幕上呈现的内容,并且可以接受用户的输入事件,包括触摸,加速度计和键盘输入等。我们需要在层中加入精灵,文本标签或者其他游戏元素,并设置游戏元素的属性,比如位置,方向和大小;设置游戏元素的动作等。通常,层中的对象功能类似,耦合较紧,与层中游戏内容相关的逻辑代码也编写在层中,在组织好层后,只需要把层按照顺序添加到场景中就可以显示出来了。要向场景添加层,我们可以使用addChild方法。

void addChild(CCNode* child);
void addChild(CCNode* child, int zOrder);
void addChild(CCNode* child, int zOrder, int tag);

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

4.纹理

在介绍精灵前,我们先介绍纹理的概念。我们可以认为纹理就是一张图片,这张图片被精灵显示出来。更深层地讲,纹理是3D游戏中绘制到物体表面上的图案。虽然Cocos2d-x是平面游戏引擎,但它仍然使用了3D绘图库OpenGL。这样一来,我们既可以利用图形加速器提高绘图效率,也可以在游戏中加入3D变换特效,实现更绚丽的效果。为了在3D环境中绘制平面图形,Cocos2d-x只需在3D空间中垂直于视线的平面上绘制矩形,在矩形的表面使用纹理贴图即可。

5.精灵

Sprite可以说是游戏中最重要的组成元素,它描述了游戏中的精灵,是Node的一个最重要也最灵活的子类。说它重要是因为Sprite代表了游戏中一个最小的可见单位,说它灵活则是由于其装载了一个平面纹理,具有丰富的表现力,而且可以通过多种方式加载。如果说Scene和Layer代表了宏观的游戏元素管理,那么Sprite则为微观世界提供了丰富灵活的细节表现。从游动的鱼、飞行的子弹到可旋转的炮台,都可以通过Sprite实现。