JSBing-js自動綁定C++

什麼是JSBjavascript

JSB是JavaScript binding的簡稱。Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB綁定的目的就是讓javascript腳本可以調用到c++代碼,c++代碼可以調用到javascript腳本。php

怎麼生成JSB綁定html

一、自動生成腳本java

(1)、確認好你的Binding-generatorpython

  cocos2d-x下載下來後,tools目錄底下有一個名爲bindings-generator的文件夾,這就是自動綁定須要的工具。
  若是仍需下載,請到github。
  GitHub repository: https://github.com/cocos2d/bindings-generator
android

2)、下載MacPorts軟件包管理系統,經過MacPorts咱們能夠經過命令行快速的安裝須要的軟件(官方網站: http://www.macports.org/install.php)。c++

      安裝完後須要在.bash_profile裏添加搜索路徑:具體方法是在終端輸入vim ~/.bash_profile,而後分別插入export PATH=/opt/local/bin:$PATH 、export PATH=/opt/local/sbin:$PATH。git

    使用MacPort前應該首先更新Port的index,輸入: $ sudo port -v selfupdate (強烈推薦第一次運行的時候使用-v參數,顯示詳細的更新過程)github

    (注:在使用MacPort時提示找不到port,要肯定是否設置好搜索路徑等環境變量)正則表達式

(3)、開始使用MacPort安裝須要軟件

 

  • Python 2.7.x(下載地址):目前引擎裏面的bindings-generator只支持python2.7.x版本

  • py-ymal(下載地址):這是python的一個第三方包,下載頁有不一樣系統的安裝方式,能夠參考generator.py會調用到這個包。

  • cheetah(下載地址):這也是python的一個第三方包,一個模板,generator.py會調用到這個包,安裝方式跟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文件夾,請自行建立。最後的路徑應該是這樣的:

  /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內容修改成:
  androidndkdir= android-ndk-r9存放目錄
  clangllvmdir=llvm-3.3安裝目錄
  cxxgeneratordir= bindings-generator存放目錄
   user.cfg內容修改成:
  [DEFAULT]
  PYTHON_BIN= python2 .7安裝目錄
(5)、已test.ini爲模版修改自動邦定規則
   先了解test.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 :跳過你所不須要綁定的方法和類,因而就不生成。
  將test.ini重命名爲cocos2dx_custon.ini,而後 主要修改name、prefix、classes、headers、target_namespace。
(6)、修改完test.ini後還須要修改下test.py這個腳本,打開test.py找到custom_cmd_args添加
 coco2dx_coustom對應cocos2dx_custon.ini裏面的name,jsb_cocos2dx_custom對應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只是個轉接口)

(9)、測試

   var customClass = cc.CustomClass.create();

     var msg = customClass.helloMsg()

      cc.log("customClass's msg is : " + msg)

注:綁定原文件以下

 

 

cocos2dx_custon.ini文件
相關文章
相關標籤/搜索