2010年末,我们接触到一个新同事Z带过来的iphone游戏引擎,这个引擎是他所在的某世界著名娱乐公司在北京一个工作室的引擎,开发过几款单机游戏。此时正值愤怒的小鸟风靡全球,基于这个引擎也跟风做了物理游戏。
接下来的问题是,我们都很看好android市场的前景,但在做android游戏时,遇到了技术选型的困难。我们在几个试水型的小项目中使用了LGame和Libgdx,以及我写的一个只封装了opengl的图形框架。当时只是听说过cocos2d,并没有2012年之后cocos2d-x的压倒性优势。
问题在于,LGame,Libgdx以及我封装的图形框架,本身都是基于Java语言的。我所在的公司之前有BREW(C++)和J2ME团队,开发模式基本是由BREW团队开发出游戏,再由Java程序员移植到J2ME版本,移植过程会涉及到代码重写。
换一种语言和平台进行重写的方式,我认为是不必要的,Z同事也展示了他开发的J2ME游戏转BREW的工具,使用了代码级转换。在之前我看了一部分Irrilcht 开源3D引擎的源码,以及其android版本,发现是使用的android native方式开发。由于当时我的工作和从事游戏开发的时间不长,所以只能基于部分猜想做了几个推论:
1.Android和IOS都是类Unix系统,在C/C++层,库和底层API函数接口可以通用
2.C++是游戏开发行业用了几十年而且看起来还会用几十年的语言,用它肯定没错
3.这两个系统都支持Opengl es
4.游戏开发并不需要平台相关的控件,只需要图形,声音和少量IO
于是在我和几个同事的主导下,用Z同事带过来的iphone引擎进行android版本开发,推出了公司的”P“跨平台引擎。此后,P引擎进行了数个单机和网游的开发,并扩展了windows phone8版本。但在cocos2d-x风靡之后处于一个尴尬的位置,虽然cocos2d-x的架构模式跟P引擎基本一致。一方面P引擎并非由专业的引擎团队开发,对一线开发人员,特别是项目主程的要求是很高的,这个团队必须能解决机型适配和引擎使用”不当“引起的莫名其妙的问题,由于缺乏工具支持也需要有较好的工具扩展能力。所以目前6个团队,已经有3个使用cocos2d-x,除了我所在团队,下一个项目也都不会再使用了。
其实所谓的跨平台性,并不能真正的实现一次编写到处使用,反而是一次编写到处调试。其中有苹果系统的限制狂,谷歌的碎片化,安卓各家手机平板自行一套各种胡来,推广渠道混乱要你接入几十个分支渠道版本,还有微软C++各种不支持第三方库的尿性,真还是一个任重道远的事。