两年过去了,庆文以他的个人经历亲身证明了两件事情:
第一,游戏开发并没有想象中那么困难。当年他是Android版微信读书的技术核心,如今在新的岗位上依然也是技术核心。“一通则百通”,技术是相通的,最珍贵的是我们的学习能力和钻研精神。
第二,客户端平台知识依然非常重要。手游虽然有非常独立的开发体系,但是它还是运行在Android或者iOS系统之上。App开发需要用到的很多技术,游戏开发也需要用到。作为Android开发,我们一层一层往底层走的优化能力,反而是其他大部分游戏开发所不具备的,也是我们的优势所在。
其中:
在同一个场景中的多个精灵可以通过执行动作(Action)来实现缩放、移动、旋转,从而达到让游戏“动起来”的目的。
Cocos引擎中,坐标系X轴向右、Y轴向上,Z轴(Z-Order)垂直于手机屏幕指向屏幕外,由于是2D游戏,所以Z轴只用作控制游戏元素的前后顺序。同一个场景中两个重叠或者部分重叠的 Sprite,Z-Order大的精灵会遮挡住Z-Order小的精灵,相同Z-Order的精灵,后添加到场景中的会遮挡住先添加的。
有了树形结构和Z-Order,就能利用Cocos引擎构建出任意2D游戏场景了。
**3. 手游的运行流程**
游戏的主Activity在`onCreate`时候创建一个GLSurfaceView,它继承自View,是引擎用于绘制游戏内容的。同时GLSurfaceView也接受玩家的点击事件,用于引擎与玩家的交互。
GLSurfaceView创建之后,引擎开始执行`main.lua`脚本,导演调用`runWithScene`接口,游戏就进入到第一个“场景”中了。GLSurfaceView中维护了一个`while`循环,循环中发生的事件(比如SurfaceView创建、宽高发生变化等)通过`Renderer`接口传递给外部。`Renderer`其中一个接口就是`onDrawFrame`,Cocos会在`onDrawFrame`接口实现中根据游戏设置的帧率,每间隔一段事件通知一次导演执行一帧游戏循环。
借用《我所理解的Cocos2d-x》书中的单帧处理流程图片,你可以看到在每帧中: