cocos2dx Lua工程調用C++ 詳細操作步驟

一、個人對“綁定”這詞有兩種理解
1、lua綁定到C++,就是C++能調用到lua的東西,那必須讓C++知道有哪些lua函數或變量可以用
2、C++綁定到lua,就是lua能調用到C++的東西,當然也必須讓lua知道有哪些C++東東可以給lua調用,所謂的“暴露”

這裏說的綁定就是第2種情況,在lua中能調用到Cocos2dx的函數。

Cocos2dx通過工程裏面的tools/toLua工具生成註冊C++函數到lua的函數cpp文件

二、環境設置

工具:

cocos2dx 3.8.1

NDK_ROOT 必須爲android-ndk-r9d 64bit版
Python 爲32bit版,2.7.3版(因爲有個插件是32位的(Cheetah),如果這個插件有64的,個人覺得用python64位沒問題)
python插件:Cheetah、PyYAML(3.10以上版本、有32、64可選,但現在必選32)
PS:安裝必要的庫和工具包,以及配置相關環境變量,請按照cocos2d-x-3.0rc0\tools\tolua\README.mdown說得去做,不做贅述。


-----------------------------------------綁定環境配置好之後測試--------------------------------------------

1.創建純cocos2dx lua工程:cocos new LuaTest -p com.chiu.hellolua -l lua -d D:\XXXXX ,將2dx sdk下的tools文件夾拷至LuaTest frameworks cocos2d-x 下,原本生成的項目該文件夾是不全的,沒有綁定的腳本等等。

2.編寫測試Cpp類TestCpp





3.編寫綁定腳本genbindings.py(可重命名)和.ini配置

a.tolua++ 工具的路徑:tolua_root = '%s/tools/tolua' % project_root  運行腳本放到tools文件夾下此處不用修改

b.輸出綁定生成文件(.cpp和.hpp)路徑(根據需要修改,此處是我自己的):‘%s/tests/lua-empty-test/project/Classes/auto’ % project_root

c.修改cmd_args參數:第一個參數是ini文件名(我的是'testCpptoLua.ini'),第二個參數包含兩部分,第一部分對應ini文件首行內容,如[cocos2dx].一般是第一行,形如 我的參數cmd_args={'testCpptoLua':('testCpptoLua','lua_testCpptoLua_auto')},含義就是查找testCpptoLua.ini中的[testCpptoLua]字段配置,最後生成的.hpp .cpp以 lua_testCpptoLua_auto命名。如果第二個參數對應不上,會出現Section not found in configfile的錯誤。

d..ini文件的修改:prefix 關係到lua函數開頭的名字,如此處我測試用例則寫prefix=testCpptoLua. 那麼上述所說綁定生成的.hpp .cpp則以lua_testCpptoLua開頭。另 外,ini還需修改的字段是headers, 即爲需要綁定生成的C++類頭文件地址,如我寫的:headers = %(cocosdir)s/../Classes/TestCpp.h , 也就是放在工程Classes文件 夾下。最後修改的字段爲classes, 也就是你綁定的C++類名,如我的寫:classes = TestCpp.  注意PS:headers和classes配置多個類,headers用%字符連接.h, classes用*連接多個類名 ,有多個就寫多少個


4.當前目錄下運行cmd,並執行腳本命令: python genbindings.py,如出現bindings succeeds說明生成成功。如提示Fails,則說明失敗,根據錯誤提示修改.py 或者 .ini配置文件


5.將生成的lua_testCpptoLua_auto.hpp lua_testCpptoLua_auto.cpp 以及原C++ TestCpp.h TestCpp.cpp四個文件拷貝到Classes目錄下(當然地址可以隨意放置,只需在工程添加正確的引用位置即可),並添加四個文件到工程Classes下


6.註冊TestCpp類接口給lua

在需要使用TestCpp的地方添加頭文件:

<span style="font-family:Microsoft YaHei;font-size:14px;">#include "lua_testCpptoLua_auto.hpp"</span>
註冊TestCpp類:
<span style="font-family:Microsoft YaHei;font-size:14px;">register_all_testCpptoLua(stack->getLuaState());</span>

6.在lua代碼中加入測試調用TestCpp的方法,純lua的cocos2dx 工程可以看到Appdelegate是執行了engine->executeScriptFile("src/main.lua"),所以在main.lua下加入測試代碼即可:

local function main()
require("app.MyApp"):create():run()

local test = TestCpp:create("GuoKun Chiu");
test:printCurName();

end

7.測試結果會打印出:TestCpp success,cur name is GuoKun Chiu


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