移植 Cocos2d IOS 到 Cocos2d-x Android 设备上

最近在帮朋友移植一个 IOS 上的 cocos2d 游戏到安卓平台,CPP 的代码量大致在一万行左右,说大也不大,但也着实不小。移植了几天,吐槽一把:

由于现在还没有这样的自动化工具,所以很大一部分还是需要靠我们人工来转换,但这并不表明我们不能偷一些懒。对于一些可以自动化做掉的,当然直接替换掉,比如:

  • 将 [self 替换成 this-> 是肯定没有错的。
  • 还可以把 ]; 替换成 );
  • - (void) 替换成 void CLASSNAME:: 基本上也是不会大错的,当然了,如果Objective-C的几个类的实现都放在一个文件里面,那确实会出现问题。
  • CGGloat可以被typedef成float,或者索性全部替换成float
  • Objective-C 里面对于NSMutableArray的遍历写起代码来是很方便的,但是在 cocos2d-x 中就不是了,对于 CCArray的遍历比较麻烦一些,基本上这个样子:


CCObject *pObj = NULL;
CCARRAY_FOREACH(array, pObj) {
  CCSprite *sprite = (CCSprite*)pObj;
  ...
}


cocos2d-x 中没有直接对应的NSNumber类,基本上你可以使用CCString然后调用它的floatValue()啊之类的函数。但有时候还是不够直接。因为 Objective-C 中可以使用id这个类型,可以使用isClassOf() 等这样的动态查询的函数,这个时候直接移植过来就有些麻烦了。要么一股脑全部弄成CCObject,然后运行时调用 C++ 的 dynamic_cast<T>(v) 来做。

总的来说,移植过程还是很直观的,因为 cocos2d-x 和 cocos2d 在 API 的命令上都尽量保持了一致。

后记:

自己在前面写了怎么将 cocos2d 改成 cocos2d-x 的经历,现在将一些默认的操作完善成了一个简单的工具,注意这个只是半自动的工具,还是有很多未完善的功能。这个工具并不顾及 objective-c 的语法,如果我们能理解 objective-c 的语法,那么就可以更加好的进行转换。这个就当成下一步的目标好了。:)

代码的仓库在github的 这里

欢迎大家集思广益,贡献代码 :-)

猜你喜欢

转载自gamedev.iteye.com/blog/1913711