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都會導致窗口的假死所以使用時要切記這點




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章