CocosCreator的第一次体验

很巧,最近接到一个游戏需求,前后调查了Unity3D和CocosCreator。但是考虑到它们是作为项目的一部分使用的,并且受限于Unity3D的使用条款,为了避免法律问题,我最终选择使用CocosCreator来实现。第一次接触Unity3D、CocosCreator等游戏引擎,从学习到完成大部分项目,大概用了一个月的时间,然后打包成静态库,供其他客户端的同事使用。主要的学习方式是CocosCreator官网文档和官方Demo(看中文文档很爽!!!)。本文的目的主要是记录过程中遇到的问题和解决方法,并不是一个完整的教程。

这次想做的是最简单的跑酷游戏,不用平铺(贴图编辑器)和脊椎(骨骼动画编辑器)。做了这个小游戏才发现游戏其实已经发展的很成熟了。

我们可以看到,元素非常简单,背景主要包括前景和中间场景。我们可以通过设置不同的速度来达到现实中的跑步效果。主要的逻辑实现部分是前台的任务和障碍。因为没有使用物理引擎,所以直接通过CocosCreator的碰撞检测来实现。英雄可以跳过障碍,撞倒障碍,收集金币。按住屏幕,英雄跳起来。长按的话,英雄会跳的更高。如果是自然的,还是需要一个简单的物理公式。正常情况下,hero在X轴上是没有速度的。一种情况,当障碍物阻挡英雄时,会有和障碍物相同的速度来模拟阻挡效果。另一种情况是,阻挡发生后,英雄移动到位,需要一个速度才能回到原来的位置。因为CocosCreator提供了碰撞检测后的回调函数,所以我们可以很容易地在回调中做一些相关的操作,比如让遇到的金币消失。

有个同事开发了cocos2d-x,用c++向他请教了一些基础知识,但是细节和cocosCreator相差甚远,因为cocosCreator是用cocos2d-js框架和可视化编辑器实现的。因为Unity3D是先研究出来的,所以这个脚本的方式还是比较能接受的。其核心思想是在组件和编辑器中制作精灵和动画,然后通过脚本组件控制其逻辑实现。各种功能都组件化了。当我们需要给精灵添加一个功能的时候,我们就给他们添加一个组件。制作这个小游戏使用的组件数量也是有限的,主要使用:

编辑器给我们提供了一个方便的拖拽界面,直接导入我们需要使用的图片,会自动生成向导文件(但是用了Unity3D之后,还是觉得Unity3D的功能集成度更高,可以做3D)。

写剧本的时候,不能离开编辑。写脚本的时候,真的让我这个ios程序员有点迷茫。JS的使用方式让我有点不舒服。没有xcode的提示功能,写起来还是有点吃力。JS也是边学边写,不过多亏了官方的Demo,几乎所有的组件都是一次写完的,所以就像葫芦画瓢一样。写的时候发现引擎其实并没有帮我们做很多工作(Unity3D可以直接在编辑器里设置物理属性,但是听说下一个版本的CocosCreator也会有)。在编写剧本的过程中,最复杂的就是英雄剧本的编写,需要检测碰撞,处理英雄跳跃过程中的不同状态。在碰撞检测中,你需要自己计算碰撞的位置,把它当作一个矩形的碰撞体,只计算X轴和Y轴的碰撞。如果X轴碰撞,hero与障碍物速度相同,如果Y轴碰撞继续,则是调整hero的Y轴位置,使其位于障碍物顶部。在跳跃的过程中,动画是切换的。

和CocosCreator编辑器不同的是,这个编辑器是我写的一个生成障碍物的app,方便产品配置障碍物的位置。主要实现思路是使用UICollectionView,界面非常简单,主要是用CocosCreator脚本实现。需要把颗粒状的障碍物连成一条长条形,所以需要把世界上的障碍物粒子结构化,得到粒子在障碍物底部的位置,然后再把它们连在一起。在这种情况下,对每列中的均匀障碍物进行深度优先搜索,记录最低点和搜索深度,这样生成的JSON文件就可以直接用在CoCosCreator脚本中。