JSBing-js自动绑定C++
什么是JSB
JSB是JavaScript?binding的簡稱。Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB綁定的目的就是讓javascript腳本能夠調(diào)用到c++代碼,c++代碼能夠調(diào)用到j(luò)avascript腳本。
怎么生成JSB綁定
1、自動生成腳本
(1)、確認(rèn)好你的Binding-generator
cocos2d-x下載下來后,tools目錄底下有一個名為bindings-generator的文件夾,這就是自動綁定需要的工具。
如果仍需下載,請到github。
GitHub repository:?https://github.com/cocos2d/bindings-generator
(2)、下載MacPorts軟件包管理系統(tǒng),通過MacPorts我們可以通過命令行快速的安裝需要的軟件(官方網(wǎng)站:?http://www.macports.org/install.php)。
? 安裝完后需要在.bash_profile里添加搜索路徑:具體方法是在終端輸入vim ~/.bash_profile,然后分別插入export?PATH=/opt/local/bin:$PATH 、export?PATH=/opt/local/sbin:$PATH。
使用MacPort前應(yīng)該首先更新Port的index,輸入: $?sudo port -v selfupdate?(強烈推薦第一次運行的時候使用-v參數(shù),顯示詳細(xì)的更新過程)
(注:在使用MacPort時提示找不到port,要確定是否設(shè)置好搜索路徑等環(huán)境變量)
(3)、開始使用MacPort安裝需要軟件
?
-
Python?2.7.x(下載地址):目前引擎里面的bindings-generator只支持python2.7.x版本
-
py-ymal(下載地址):這是python的一個第三方包,下載頁有不同系統(tǒng)的安裝方式,可以參考generator.py會調(diào)用到這個包。
-
cheetah(下載地址):這也是python的一個第三方包,一個模板,generator.py會調(diào)用到這個包,安裝方式跟py-ymal相同。
?
sudo port install python27 py27-yaml py27-cheetah
安裝?llvm-3.3,這個需要單獨下載安裝,下載地址?http://llvm.org/releases/download.html#3.3
下載完后請解壓至Users/你的名字/bin底下,并將解壓岀來的文件夾更名成clang+llvm-3.3。如果沒有bin文件夾,請自行創(chuàng)建。最后的路徑應(yīng)該是這樣的:
/Users/lp43/bin/clang+llvm-3.3(lp43是我的名字)安裝android ndk r9,這個下載安裝可自行百度 (4)、修改自動邦定的配置文件,將bindings-generator\test下的userconf.ini.sample和user.cfg.sample重命名為userconf.ini、user.cfg。 userconf.ini內(nèi)容修改為: androidndkdir=android-ndk-r9存放目錄 clangllvmdir=llvm-3.3安裝目錄
cxxgeneratordir=bindings-generator存放目錄 user.cfg內(nèi)容修改為: [DEFAULT] PYTHON_BIN=python2.7安裝目錄 (5)、已test.ini為模版修改自動邦定規(guī)則 先了解test.ini中變量含義: name:?單純只是名稱。
prefix:?最后生成的文件都會以這個命名前綴,如 prefix.cpp, prefix.hpp, prefix_api.js?
classes:?你的所需轉(zhuǎn)換的類的名稱,必須是所導(dǎo)入的頭文件中所有的類,這里可以使用正則表達(dá)式來加入多個類,參考cocox2dx.ini。
extra_arguments:?一些接口所需的系統(tǒng)參數(shù)。如clang包,android ndk包的引入所需的系統(tǒng)參數(shù),寫法可以參照以上三個.ini。?
headers:?你所需要綁定的頭文件路徑。?
target_namespace:命名空間。最后生成的JS文件的類,會以這個命名空間開頭。例如你的類為sqlite,命名空間為cocos2dx,那么最后生成的就是 cocos2dx.sqlite。?
rename_functions:可以將你要綁定的方法的名稱更改成你所要的。可以更改多個,用逗號隔開,寫法參照?SqliteCpp::[sqlite3_execCpp=sqlite3_exec],這個就是將SqliteCpp中的sqlite3_ execCpp方法重命名為sqlite3_exec方法。
rename_classes?:同上,重命名類。
skip?:跳過你所不需要綁定的方法和類,于是就不生成。 將test.ini重命名為cocos2dx_custon.ini,然后主要修改name、prefix、classes、headers、target_namespace。 (6)、修改完test.ini后還需要修改下test.py這個腳本,打開test.py找到custom_cmd_args添加?coco2dx_coustom對應(yīng)cocos2dx_custon.ini里面的name,jsb_cocos2dx_custom對應(yīng)cocos2dx_custon.ini里面的prefix
(7)、生成綁定文件,運行命令python ./test.py,成功后可以在frameworks/cocos2d-x/cocos/scripting/js-bindings/custom文件夾下看到生成的綁定文件。(注:生成目錄可能有所不同)
(8)、綁定文件使用,將文件加入工程
打開?jsb_cocos2dx_custom.hpp找到register_all_cocos2dx_custom(JSContext* cx, JSObject* obj),然后將綁定js注冊到AppDelegate.cpp里面sc->addRegisterCallback(register_all_cocos2dx_custom);
(注:記得綁定到原文件也要加到工程中,jsBing只是個轉(zhuǎn)接口)
(9)、測試
var customClass = cc.CustomClass.create();
? ? var msg = customClass.helloMsg()
? ? ? cc.log("customClass's msg is : " + msg)
注:綁定原文件如下
?
cocos2dx_custon.ini文件?
??
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/guangyun/p/6048152.html
總結(jié)
以上是生活随笔為你收集整理的JSBing-js自动绑定C++的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UploadHandleServlet
- 下一篇: kafka模块概述