【全民水浒】客户端工具选型篇
引擎选择原因
全民水浒是一款2D策略卡牌手游,在引擎选型上并没有花费太多时间,主要考虑以下方面:
(1) 引擎本身的影响力。从宏观上看,如果想使用一款引擎,必须考察它的成熟度、社区活跃程度和市场的占有率,这样在手游引擎市场上就剩下cocos2d-x和unity3D了,而unreal在手游开发上还相对滞后,并且门槛要高。
(2) 同类竞品的方案。当时“我是MT”,“大掌门”是两款很火爆的卡牌游戏,而在客户端表现上也符合我们的技术需求,这两款游戏都使用了cocos2d-x。
(3) 强运营需要脚本支持的考虑。水浒一开始就定位成一个需要考虑强运营的游戏,需要尽量让所有业务逻辑都可以动态更新,从而绕过苹果不可控的审核周期及避免玩家重新下载安装包,所以要求引擎在脚本支持上有尽可能高的广度和深度,乃至核心玩法都可以完全脚本化。而当时手游符合这个要求的引擎并不多,Unity3D可以使用UI插件进行2D开发(2013年5月还没有内置2D套件),但对脚本的支持并没有符合我们的预期,虽然有插件可以进行脚本化开发,但是如果所有业务逻辑包括和新玩法都使用脚本的话,反而失去了Unity3D快速开发的核心优势。
针对引擎的额外优化项
cocos2d-x本身提供的脚本框架不易使用,缺乏可以对UI进行快速事件绑定的机制。为了得到较高的脚本开发效率,全民水浒对cocos2d-x的UI控件部分进行了优化扩展,主要达到以下目的:
(1) 对UI控件的快捷获取
(2) UI控件的快捷交互事件注册
(3) 常用的控件api可以直接在脚本调用,而不用额外转型
其中的主要类图如下:
在这里限于篇幅,并没有把UINode的所有属性和函数列出来,其子类也只列了一部分。主要思想就是,在cocos2d-x的ccbi布局文件载入时,动态建立一个UINode构成的树,其层级结构和CCNode一样,并包含对应CCNode的引用。而在布局文件编辑时,会给需要的控件节点进行字符串命名,在载入ccbi布局文件后,会得到这个ccbi对应UINode树的根节点,这样就可以根据名字标识来获取任意子控件节点了,如下图所示的lua脚本片段:
得到某控件对应的UINode后,就可以进行事件的注册了,如下图所示lua脚本片段:
UINode里面封装了大部分的控件API,比如setVisible, setEnabled, setOpacity, setString等等,这样大部分情况下都不用转成某CCNode来进行操作了,比如设置CCLabelTTF的字符串内容, 如果用Cocos2dx自带的tolua支持,需要强转类型再调用:
使用了UINode之后,至需要调用如下代码即可:
需要额外说明的是,水浒会把所有UI控件类的api都尽量tolua,这样可以降低因为无法预料的需求而导致修改二进制层的概率。
开发工具上的使用经验
1、编译工具:
iOS:XCode4.6.3, XCode 5
Android:ADT v22.3
Win:VS2012
Xcode5有一个坑,资源不会立马更新,每次调试都得clean一次,效率非常的低,水浒又是Lua脚本实现主要逻辑,所以调试时还是使用XCode4.6.3。
2、脚本工具:
Sublime2 (一个很好用的夸平台代码编辑器)(mac,win)
3、UI、动画编辑工具:
CocosBuilder v3 (mac)
在项目立项时,最成熟的cocos UI编辑器就是CocosBuilder了,所以选择了它。CocosBuilder是一款开源的UI以及动画编辑器,所以可以根据项目需要修改代码,比如它有50个文件夹上限,当文件夹数量达到上限后工程就无法publish,可修改此值重新编译;再比如CocosBuilder的粒子编辑器很弱,没有更随Type和粒子模板可供选择。
另外CocosBuilder提供了插件扩展,这对于扩展新的UI组件非常受用。
遗憾的是CocosBuilder停止了更新,基于此的SpriteBuilder功能更强大,但只支持Cocos2d-iphone,需要自己写cocos2d-x的解析,github上有第三方的cocos2d-x解析库。
4、图片拼接工具:
TexturePacker v3 (mac,win)
TexturePacker用来打包通用UI和技能特效等资源。
5、位图字体工具:
支持渐变填充、描边、阴影等效果。另外v1.7还支持图片填充、调整文字间距,非常好用。