Cocos2DX 开发笔记2

选择了Idea来当做IDE

余下的便是针对这个IDE进行一些定制

使我们的工程可以更加顺畅的进行


1. 采用标准的jsDoc

Idea的js提示不仅仅只是局限于语法层面的

JsDoc也可以被辅助进提示系统中去

所以对jsDoc的了解有助于加强代码提示与语法检查大大减少我们不必要的调试

参考的资料     http://usejsdoc.org/ (E)

              http://www.36ria.com/5101 (C)


2. 导入cocos2dx-html

搭建工程之初采用了jsb的代码来做cocos2dx代码的提示

但是效果十分差相当多的信息不能正确展示

最典型的错误便是参数无法提示

因为jsb中的所有代码结构都是xxx:function(){}

导致只能读取C++代码的提示当做jsDoc来处理

由于cocos2dx的JS绑定并不是100%还原c++的

有一部分的名字被改写了(ex. cc.FileUtils.getInstance().getStringFromFile)

有一部分的方法是重载的需要体现多种形式(ex. cc.LabelTTF.create)

这也就是为什么我们必须要在启动前引入jsb.js的原因

然而对于社区来说他们希望以后js的代码可以无缝兼容js-bind与html两端

所以虽然是两个框架但是互通的地方很多

准确的说整体上是js-bind是html的超集


3. win32调试环境

实际上不管是用什么IDE

调试环境的确定才是最关键的

由于是windows系统下开发所以与mac相关的方案就不考虑了

至于iOS的发布部分之后会采用Hudson进行部署

android的发布可以在eclipse下进行(http://developer.android.com/sdk/index.html 官方的adt中包含了一个打包完整的Eclipse)

win32平台的版本可以采用vs进行(vs速成版本是免费的而且已经够用了)

android版本的优点是可以发布到真机测试

在做性能测试以及qa测试时必须要用真机否则会有严重的误差

而且由于最终需要进行平台接入所以真机测试时必须的

缺点是速度慢(传输apk与打包apk本身都慢)logcat不友好

而且最重要的是需要真机(推荐一个模拟器http://www.bluestacks.com/)人手一台而且要统一不现实

win32平台

优点是相当快

缺点是很多手机上的操作无法模拟而且速度快到了让你忘记要优化

这个错觉也很需要注意

所以最终方案确定为

开发时团队人员以win32版本为主

调试测试阶段(非开发人员)以android版本为主

相关版本都采用Hudson管理持续集成


4.win32环境的补充

使用后有几个不满意的小地方

4.1 log有空行

所有的log多了一个空行这个是由于代码在绑定的时候无条件补充了一个\n导致的

对于安卓版本来说没事(因为logcat不显示)

对此忠于不改变源代码的方式在导入完自定义框架的绑定代码后我们重新定义cc.log将多余的\n去掉

void register_all_jsb_customs(JSContext* cx, JSObject* global){
    JS_DefineFunction(cx, global, "log", _cy_log, 0, JSPROP_READONLY | JSPROP_PERMANENT);
}

其中_cy_log可以完全复制ScriptingCore::log的代码,注意一下名字别冲突了就行

4.2 必须要有vs才能显示log

实际上logcat也有这个问题但是毕竟idea和eclipse都有logcat插件反而不是什么问题了

但是人手一份vs+idea就不方便了

在此参考了quick-cocos2d-x(https://github.com/dualface/quick-cocos2d-x/issues/51)的开发方案独立出了控制台来显示log

在vs的项目属性中添加预处理(配置属性 -> C/C++ -> 预处理器 -> 预处理器定义)USE_WIN32_CONSOLE即可

但是还是有不足的地方就是窗口过小

当内容多了以后还会有一闪而过的情况

4.2.1 修改注册

通过更改注册表可以实现定制默认的控制台窗口尺寸与缓冲区大小

http://unmi.cc/save-windows-command-size (C)

4.2.2 修改代码

通过在初始化的代码中增加对控制台的调整保证没有导入/修改注册表的同学也ok

调整main.cpp的代码


#ifdef USE_WIN32_CONSOLE
    AllocConsole();
    freopen("CONIN$", "r", stdin);
    freopen("CONOUT$", "w", stdout);
    freopen("CONOUT$", "w", stderr);
    // 初始化一下控制台的尺寸
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD size={160,9999};
    SetConsoleScreenBufferSize(hOut,size);
    SMALL_RECT r;
    r.Left   = 0;
    r.Top    = 0;
    r.Right  = 160;
    r.Bottom = 50;
    SetConsoleWindowInfo( hOut, TRUE, &r );
#endif

以上的相关参数适合在拥有19"屏幕的情况下

4.2.3 复制log

最简单的方案是在标题栏单击右键菜单中有全选然后再窗口内单击右键便是复制(不是按Ctrl+C)

或者自行拖拽选中部分log

切记选中任何log都会导致窗口的假死所以使用时要切记这点




你可能感兴趣的:(log,console,jsdoc)