这一次是接到令箭,公司大老板的原话是:“咱们有资源,要投资有投资,为啥咱们就不做呢?!快快整起来呗,你说是不?” 一顿川菜+啤酒给我就弄上套了。不过对我来说,说不定是个不错的转机。所幸之前有做游戏的经验和一点点资源,我决定要开始淌Cocos2dx这汪浑水,这里记录的是昨天一天淌的小坑的过程。同时要大力感谢哥们Andy的技术支持。
槽点


在Cocos2d-x还是Cocos2d-iPhone的时候,我就很感兴趣了,彼时我是个AS3开发者,多少受到了一些技能观望的限制,当时觉得Objective-C是如此的怪奇,令人望而生畏,但至少觉得当时整个体系还是完整的,条例清晰,文档健全,Getting Start也比较循循善诱。而进入到Cocos2d-x阶段之后,就忽然变得错综复杂,官方文档基本都是民营的,许多人拿它是热门开源项目说事儿,我并不这么认为,许多开源项目的文档和网站就透彻得很。总之就是乱成一团沸翔。
Cocos Studio


我先是兴致勃勃地下载了Cocos Studio,Visual Editor,在长相与Flash激似的界面上拖拽了半天,发现它并未附带代码编辑的部分。也怪我没有仔细看官方下载页面上的说明:

A game development tool kit based on Cocos2d-x, includes Scene Editor, UI Editor, Animation Editor, Asset Shop, and more.

Cocos Code IDE

在发现其可以导出为Cocos Code项目后,我得到第二个关键词,Cocos Code IDE,它是以Eclipse插件形式存在的一个代码编辑工具集合,在细致地看了半天Setup之后,发现下面说从2.0开始采取IDEA IntelliJ插件形式继续开发了。所以之前的教程没有什么卵用了。我又地去下载和初始化IntelliJ。
最开始我是直接去下载了Community Edition,然后下载Cocos Development Kit插件。也可以从上面的链接直接去下载打包好的Cocos Code IDE的包。

在岔路上支出:99¥,买了CleanMyMac3。啊……

Cocos2d-x

之后,当然需要下载主引擎了,Cocos2d-x就是主引擎,让我们看看下载页面上的命名情况:
BadAss Naming from cocos2d-x
Cocos2d-x,好吧这个没有任何问题,主引擎核心工具包,一般这玩意应该叫SDK。
Cocos,看起来是一个一体化的解决方案,因为没有使用任何后缀说明嘛,而实际上是一个UI编辑器。
SDKBOX,终于有个看起来很像样子的了,而它却是一个集成和使用原生或者第三方SDK的工具集合。一般啊这种应该叫个Native,External,Add-on,最不济叫个3rd也成啊。
我只能说,Cocos2d-x团队的人,应该是一群掌握大智慧的矮人,他们是我见过的,最不会给产品命名,并且结构体系最不一体化的一群人。
最后我听从了Andy君的建议,从这里入手

Setup

想做到真正的跨平台是不容易的,我的安装顺序如下,

  • Python(Mac OSX就是好,早就装好了)
  • Java(Mac OSX就是好,早就装好了)
  • 之后,解压缩你下载的主引擎包,一般叫”cocos2d-x-x.x.x”,然后在命令行执行:
    python [YOUR COCOS ENGINE PATH]/setup.py
    这个是用来安装COCOS2D-CONSOLE,嗯,命令行工具不叫Cmd什么或者Command Line Tools之类的,非叫个Console。
  • ADT (for Android) 最好是下载ADT,这里留一个Android Develop镜像网站。当然也可以去安装Android Studio,不过我是以ADT为例子做的后期操作。
  • 下载NDK 你可以去官网,或者使用Cocos,注意,是Cocos的商店中去下载,速度很快。没有这个包你是不能在Android开发环境里跑C++的。
  • 下载Ant,一样可以去Cocos商店下载。
  • 下载安装XCode (iOS开发者就是好,早就装好了)
  • 启动IntelliJ,创建一个Cocos JS项目,
    Create a fucking js proj

“这看起来棒极了,不是么!”(译制片配音腔)

  • 坑,如果现在你就Run这个项目,你会看到一个傻傻的Error “waiting for debugger to connect”的模拟器,你点了play也没有什么卵用。
    WTF
    WTF
    答案在log里面.就是说,这个插件在向项目所在目录的上级目录找config.json,然后没找到……所以你必须手动CP一个过去。
  • 好了,青毛鬼火终于出现在模拟器里面了。下一个问题是,怎么真机调试。我找到的解决方案是这样的,右键单击项目–> Cocos Tools–> Add Native Codes Support。
    Add Native Codes Support

随后就可以看到项目的:
frameworks->runtime-src->

Native Project

下面有对应的iOS项目和Android项目文件夹,这样就可以分别用对应的IDE做真机调试了。

iOS Proj on XCode

同时导出的有mac和ios的版本,不过都无所谓,需要注意的是关闭 bitcode支持。青毛鬼火就出现在你的iPhone上了。

Android Proj on ADT

这边是遇到麻烦比较多的,直接用ADT Eclipse导入项目后,编译是没有问题的,问题在运行时就会崩溃,

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.cocos2dx.Testing-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcocos2djs.so"

解决办法是,

  • 先在在Eclipse中导入工程
    your_cocos2dx_engine_path/cocos/platform/android/java
  • clean & build all projects, 确保libcocos2dx项目的bin目录下生成了libcocos2dx。jar
  • 下面,在命令行,对应的Cocos项目目录下(*注意是Cocos项目!不是导出的Android项目),运行:
    cocos compile -p android
    如果你遇到了下面的问题
    未找到工程 '/your_cocos2dx_engine_path/Testing/frameworks/runtime-src/proj.android' 可用的 Android 目标平台。 Android 目标平台版本应该大于或等于 21。
    请运行
    python [YOUR COCOS ENGINE PATH]/setup.py
    
    Check environment variable ANDROID_SDK_ROOT
    Search for environment variable ANDROID_SDK_ROOT...
    ANDROID_SDK_ROOT is found : /Library/Cocos/CocosStore/sdk
    定位到对应的ANDROID_SDK_ROOT后,会发现其中没有对应的sdk,下载拷贝对应的sdk后再执行compile就通过了。