JavaScript強化教程 —— Cocos2d-JS自動JSB綁定規則修改

本文爲 H5EDU 機構官方 HTML5培訓 教程,主要介紹:JavaScript強化教程 —— Cocos2d-JS自動JSB綁定規則修改
 
什麼是JSB

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



怎麼生成JSB綁定

1、自動生成腳本

在Cocosd-JS引擎目錄下的tools/tojs目錄下有官方用於生成自動版本的腳本。我們可以從這裏入手來學習。

(1)搭建環境

需要安裝以下三個軟件 

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

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

cheetah(下載地址):這也是python的一個第三方包,一個模板,generator.py會調用到這個包,安裝方式跟py-ymal相同。



下載好的軟件包解壓後。在軟件目錄下執行

1
python setup.py install
如果是mac下,在命令前面在sudo即可。

詳細信息大家可以查看官網的教程(地址)



(2)運行genbindings.py

搭建好環境後,打開命令行,進入目錄cocos2d-js/tools/tojs 。輸入命令

1
python genbindings.py
自動綁定成功以後可以看到下圖所示 

20150521210554473.jpg

綁定後的生成的代碼在目錄

cocos2d-js/frameworks/js-bindings/bindings/auto

至於爲什麼是生成這些代碼,大家可以看genbindings.py中的代碼。這裏就不詳細說明了

2、手動生成腳本(本文不做講解)



怎麼進行自動生成的腳本綁定規則修改

自動綁定規則的約束主要是在這個目錄下tools/bindings-generator/targets/spidermonkey。

我們先來看conversions.yaml,這個是關於綁定代碼的配置文件。



1、類型轉換

20150521211842536.jpg

根據上圖可以看到。在自動綁定中會將c++的float類型轉換成double類型,因爲float類型沒有辦法生成綁定。short類型轉換成int32_t



2、命名空間轉換


20150521212053405.jpg

將c++代碼中帶有左邊命名空間的,在js中定義爲右邊的命名空間。



3、將JS傳過來的腳本變量轉換爲c++變量

20150521212332451.jpg

比如傳過來的js變量需要轉換成是int型,就用右邊的代碼來轉換。



4、將JS傳過來的腳本對象轉換成c++對象

20150521212601552.jpg

js傳遞過來的對象類型需要跟c++對象進行映射。如果要增加對於對象爲空值得處理判定,就可以在這裏增加。



5、將c++的變量轉換成js變量

20150521212946602.jpg

比如int對象需要轉換成js變量那麼用的就是int32_to_jsval。



6、將c++的對象轉換成js對象

20150521213139219.jpg

看上圖就對比代碼就可以看出。c++轉換成js對象的函數就通過這幾個步驟


js_get_or_create_proxy
OBJECT_TO_JSVAL
以上就是所有的轉換基礎規則,然後在根據一些模板,就完成了自動綁定代碼的生產。



templates目錄下則是一對生成代碼的模板

20150521211533483.jpg

有構造函數的模板,重載函數的模板等等,具體大家可以看裏面的代碼寫法。


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