3、Android NDK
Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被称为“NDK”。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件,就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。[7]
3 Cocos2d-x 3。x引擎介绍
3。1导演、场景、层和精灵
Cocos2d-x 3。x游戏引擎用节点树形结构去管理游戏对象的,一个游戏里拥有许多场景,同样一个场景也包括很多的层,一个层也可以拥有多个游戏对象。游戏流程的管理是由导演类(Director)来管理执行的,导演类可以通过切换不一样的游戏场景来完成游戏流程的管理。其基本结构框架如下图:
图3-1 Cocos2d-x游戏引擎基本结构框架
1、导演(Director)
导演类是Cocos2d-x游戏引擎的核心,OpenGL的初始化,游戏场景的切换,暂停与继续游戏的控制,控制游戏对象,保存游戏数据,获取设备屏幕尺寸等等都是由导演类来控制的。
2、场景(Scene)
一个游戏通常包含多个场景,游戏板块的切换也就是场景之间的切换,流程控制是场景的一个重要作用,可以通过导演类中的方法来控制游戏中场景的切换。下面列举一些常用的方法:
runWithScene( Scene *scene ) 启动游戏,并运行指定的scene 场景。当需要调用这个方法的时就是在主程序第一次启动主场景的时候;
pushScene( Scene *scene ) 方法首先将当前运行中的场景暂停,暂停之后将场景入栈,然后再将指定的游戏场景设置为当前运行场景;
replaceScene( Scene *scene ) 使用指定场景替换当前运行场景,然后释放当前的场景;
popScene() 方法的作用是释放当前的场景,将之前入栈的场景出栈,并将出栈的场景设置为当前运行场景。如果栈为空,直接结束应用。和PushScene结对使用;
end()方法的作用是释放和终止执行场景,并结束应用;
3、层(Layer)
层与场景是有差别的,层通常是在屏幕上可以显现的,比如用户事件输入的接收,包括单点触摸事件,键盘输入等等。可以在层中加入精灵,文本等其他游戏元素,并设置其属性,好比游戏元素的位置,方向和大小;与层中的游戏对象的功能相似,耦合度高,编写好层之后,我们把层按照一定的顺序添加到游戏场景中之后,这些层就可以显现了。
4、精灵(Sprite)
Cocos2d-x中的精灵可以移动、旋转、缩放、执行动画等其他转换,实现精灵显示的基本代码如下:
//创建场景
auto scene = Scene::create();
//创建名为layer的层并把层添加到游戏场景中
auto layer = HelloWorld::create();
scene->addChild(layer);
//创建名为sprite的游戏精灵对象并把游戏对象添加到layer层里
auto sprite = Sprite::create("HelloWorld.png");
layer->addChild(sprite, 0);
3。2动作、粒子系统和动画
1、动作
动作(Action)类创建一个对象就代表着一个动作,每一个动作都需要Node节点对象的支持,所以说动作是作用于Node的。其实动作类是一个接口,Node通过调用动作类的方法实现一系列动作。在游戏的开发中经常用到的两种动作是即时动作和持续动作,这两种动作都是在有限时间内完成的。即时动作指的立即完成的动作,比如设置精灵位置、缩放精灵大小等等。持续动作就是可以通过精灵的属性值慢慢的改变,从而可以实现的动画效果。
2、粒子系统