quick-cocos2dx將C++匯出lua
可以按照官網教程來做。
個人總結,分為5步:
進行相關環境配置。
編寫.h .cpp檔案。
在引擎frameworks\cocos2d-x\tools\tolua目錄下重寫*.ini配置檔案與genbindings.py指令碼。
執行自定義的genbindings.py指令碼,得到生成的lua_*_auto.cpp 和lua_*_auto.hpp檔案。預設路徑在frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto下面。也可以修改genbindings.py第134行的輸出目錄 output_dir = ‘%s/cocos/scripting/lua-bindings/auto’ % project_root
呼叫register_all_***(lua_State* tolua_S)註冊函式。
可以在lua中呼叫啦。
————————————————————-^_^——————————————————附:
ini配置檔案格式:
注:加粗的表示一般需要我們自己修改的地方。[title]:要配置將被使用的工具/ tolua的/ gengindings.py指令碼的稱號。一般來說,標題可以是檔名。
prefix:要配置一個函式名的字首,通常,我們還可以使用檔名作為字首。
target_namespace:要配置在指令碼層模組的名字。在這裡,我們使用cc作為模組名,當你想在指令碼層REF的名稱,您必須將一個名為字首,CC在名稱的前面。例如,CustomClass可以參考作為cc.CustomClass。
headers:要配置所有需要解析的標頭檔案和%(cocosdir)s是的Cocos2d-x的引擎的根路徑。
classes:要配置所有繫結所需的類。在這裡,它支援正則表示式。因此,我們可以設定MyCustomClass。*在這裡,用於查詢多個特定的用法,你可以對照到tools/tolua/cocos2dx.ini。
skip:要配置需要被忽略的功能。現在繫結發電機無法解析的void *型別,並委託型別,所以這些型別的需要進行手動繫結。而在這種情況下,你應該忽略所有這些型別,然後再手動將它們繫結。你可以對照到配置檔案路徑下的cocos/scripting/lua-bindings/auto 。
rename_functions:要配置的功能需要在指令碼層進行重新命名。由於某些原因,開發者希望更多的指令碼友好的API,所以配置選項就是為了這個目的。
rename_classes:不在使用。
remove_prefix:不在使用。
classes_have_no_parents:要配置是過濾器所需要的父類。這個選項是很少修改。
abstract_classes:要配置的公共構造並不需要匯出的類。
script_control_cpp:是的。要配置指令碼層是否管理物件的生命週期。如果沒有,那麼C++層關心他們的生命週期。
現在,它是不完善的,以控制原生物件的續航時間在指令碼層。所以,你可以簡單地把它設定為no。
—————————————————^_^————————————————
可能出現的問題:
1、LUA ERROR: [string “.\app/view/MyView.lua”]:103: error in function ‘lua_mysprite_MySprite_getNum’.
E:/myGenie/src/app/view/MyView.lua
16:07:44 argument #1 is ‘table’; ‘MySprite’ expected.
原因:我匯出的MySprite只是一個類,在使用時直接呼叫其中的方法,並沒有建立這個類,故MySprite並未被例項化。
解決方案:將要呼叫的方法getNum加static關鍵字。