1. 程式人生 > >Cocos2d-x JSB 自己主動綁定bindings

Cocos2d-x JSB 自己主動綁定bindings

script template class 分支 ng- bind 命名空間 exec ngs

Javascript Binding (簡稱JSB) 自己主動綁定教程。

Cocos2d-x JSB 自己主動綁定bindings-generator (以下簡稱B-G) 使用心得


假設想弄清深入原理,推薦閱讀??Cocos2D-x從C++到JS的進階之路:http://blog.51cto.com/zt/560?

B-G 是什麽?
? 當使用JSB的時候,假設你想要使用的C++的類或者方法沒有在已有JSB中被綁定,這時候。就能夠使用B-G。

它能夠生成相相應的C++的綁定文件和相相應的JS接口,屆時,你僅僅須要調用生成的相相應的JS接口,它將自己主動轉換成原來的C++的類。相當於直接調用原來的C++方法或者類。



B-G生成主要流程:
準備好必要的工具 -> 準備好你要綁定的C++的文件 -> 寫生成文件的.ini配置文件和.sh 腳本程序 -> 執行 .sh 腳本文件 -> 生成綁定文件 -> 測試綁定文件直至能夠正常使用

必要的工具:
cocos2d-x引擎:http://cocos2d-x.org/projects/cocos2d-x/wiki/Download
python 2.7:http://www.python.org/download/?? (眼下引擎裏面的bindings-generator僅僅支持python2.7版本號)
py-ymal:?http://pyyaml.org/wiki/PyYAML??(這是python的一個第三方包。下載頁有不同系統的安裝方式,能夠參考。

generator.py會調用到這個包。


cheetah:http://www.cheetahtemplate.org/?(這也是python的一個第三方包,一個模板。generator.py會調用到這個包。安裝方式跟py-ymal同樣。)
libclang:http://llvm.org/releases/3.1/clang+llvm-3.1-x86_64-apple-darwin11.tar.gz (生成的時候須要用到的lib,註意master分支也就是2.2.2這個版本號的引擎用3.1的,develop分支也就是3.0版本號的引擎用3.3的)
Android NDK:http://dl.google.com/android/ndk/android-ndk-r8c-darwin-x86.tar.bz2 (測試的時候使用的v2.2.2用的r8c, 如今的3.0beta版須要用r9b)



.ini文件
參考樣例:cocos2dx引擎根文件夾/tools/bindings-generator/test/test.ini?
cocos2dx引擎根文件夾/tools/tojs/cocos2dx_extension.ini
cocos2dx引擎根文件夾/tools/tojs/cocos2dx.ini


.ini中部分參數的使用方法:
name:?單純僅僅是名稱。
prefix:?最後生成的文件都會以這個命名前綴,如 prefix.cpp, prefix.hpp, prefix_api.js?
classes:?你的所需轉換的類的名稱。必須是所導入的頭文件裏全部的類,這裏能夠使用正則表達式來增加多個類,參考cocox2dx.ini。


extra_arguments:?一些接口所需的系統參數。如clang包。android ndk包的引入所需的系統參數,寫法能夠參照以上三個.ini。?
headers:?你所須要綁定的頭文件路徑。

?
target_namespace:命名空間。最後生成的JS文件的類。會以這個命名空間開頭。比如你的類為sqlite。命名空間為cocos2dx。那麽最後生成的就是cocos2dx.sqlite。

?
rename_functions:能夠將你要綁定的方法的名稱更改成你所要的。能夠更改多個。用逗號隔開,寫法參照?SqliteCpp::[sqlite3_execCpp=sqlite3_exec]。這個就是將SqliteCpp中的sqlite3_ execCpp方法重命名為sqlite3_exec方法。
rename_classes?:同上。重命名類。
skip?:跳過你所不須要綁定的方法和類,於是就不生成。

.sh文件:主要調用程序。用來讀取.ini配置文件和寫部分參數。
參考樣例:cocos2dx引擎根文件夾/tools/tojs/genbindings.sh?
? ? ? ? ? ? ? ? ? ? cocos2dx引擎根文件夾/tools/bindings-generator/test/test.sh

以下這句話便設定了通過調用generator.py來調用你的配置文件。並在你所設定的敵方生成你須要的綁定文件。

?set -x LD_LIBRARY_PATH=${CLANG_ROOT}/lib $PYTHON_BIN ${CXX_GENERATOR_ROOT}/generator.py ${TO_JS_ROOT}/sqlite.ini -s sqlite -o ${TO_JS_ROOT}/sqliteBinding
寫好.ini和.sh後,在cmd執行 sudo 你的.sh路徑 。便能夠在你配置的地方找到你生成的文件。

Cocos2d-x JSB 自己主動綁定bindings