您好,登錄后才能下訂單哦!
雖然網上很多關于Lua調用自定義C++類的文章,但不知道為什么,一到自己去實踐,總是遇見這樣那樣的問題,造成失敗。讓我都懷疑文章的正確性了。。。有些因為細節原因,而文章又沒提!踩了無數的坑,昨天終于成功了,今天迫不及待寫篇文章與大家分享!
如果對lua與C++如何交互不怎么清楚的朋友,可以看下這篇文章:
【木頭Cocos2d-x 026】Lua篇(第01章):讓Lua和C++牽手
如果版本不是3.x的,用以前版本的可以看下這篇文章:
Cocos2d-x下Lua調用自定義C++類和函數的最佳實踐
這篇文章詳細介紹了幾種lua調用C++的方法,最終說明了cocos2dx 3.x 用bindings-generator腳本,是多么的方便,我也感同身受,因為之前還用tolua++試過調用,還是以失敗告終。。。
雖然上面那篇文章說的很詳細,但是我親身經歷測試成功,還是簡單說下,讓大家看得簡單明了!!!
在這之前還是要說下,除了安裝好Python之外,需要進行2個步驟:
1.安裝Pyymal
http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe
2.下載pyCheetah,并解壓到C:\Python27\Lib\site-packages
https://raw.github.com/dumganhar/my_old_cocos2d-x_backup/download/downloads/Cheetah.zip
還有NDK版本要r9d版本!!!!!!
官方文檔:如何使用 bindings-generator 自動生成 lua綁定
以官方文檔CustomClass類為例,步驟如下:
以下說的frameworks都是項目下的frameworks,不是quick下的!!!!
1.在frameworks/runtime-src/Classes/目錄下,創建CustomClass類
frameworks/runtime-src/Classes/CustomClass.h
// CustomClass.h #ifndef __CUSTOM__CLASS #define __CUSTOM__CLASS #include "cocos2d.h" class CustomClass : public cocos2d::Ref { public: CustomClass(); ~CustomClass(); bool init(); CREATE_FUNC(CustomClass); int foo(int i); }; #endif // __CUSTOM__CLASS
frameworks/runtime-src/Classes/CustomClass.cpp
#include "CustomClass.h" CustomClass::CustomClass() { } CustomClass::~CustomClass() { } bool CustomClass::init() { return true; } int CustomClass::foo(int i) { return i + 100; }
2.在frameworks/cocos2d-x/tools/tolua/目錄下,創建cocos2dx_custom.ini文件
[cocos2dx_custom] prefix = cocos2dx_custom target_namespace = cc android_headers = -I%(androidndkdir)s/platforms/android-14/arch-arm/usr/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.7/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I%(androidndkdir)s/sources/cxx-stl/gnu-libstdc++/4.8/include android_flags = -D_SIZE_T_DEFINED_ clang_headers = -I%(clangllvmdir)s/lib/clang/3.3/include clang_flags = -nostdinc -x c++ -std=c++11 -U __SSE__ cocos_headers = -I%(cocosdir)s -I%(cocosdir)s/cocos -I%(cocosdir)s/cocos/platform/android cocos_flags = -DANDROID cxxgenerator_headers = extra_arguments = %(android_headers)s %(clang_headers)s %(cxxgenerator_headers)s %(cocos_headers)s %(android_flags)s %(clang_flags)s %(cocos_flags)s %(extra_flags)s headers = %(cocosdir)s/../runtime-src/Classes/CustomClass.h classes = CustomClass skip = rename_functions = rename_classes = remove_prefix = classes_have_no_parents = base_classes_to_skip = abstract_classes = script_control_cpp = no
這是最簡單的ini文件了,看起來很多,其實最主要的是修改以下幾句,其他幾乎不用改變。
[cocos2dx_custom] prefix = cocos2dx_custom target_namespace = cc headers = %(cocosdir)s/../runtime-src/Classes/CustomClass.h classes = CustomClass
具體含義看官方文檔吧,這里就不說了,這里要說的是[cocos2dx_custom],必須與文件名字一樣,否則運行腳本的時候,會報錯!反正最好和文件名字一樣,就不用再去踩坑了!prefix這個也用文件名字吧~
3.在frameworks/cocos2d-x/tools/tolua/目錄下,修改腳本
我把genbindings.py拷貝了一份把名字改成genbindings_custom.py,修改以下代碼:
cmd_args = {'cocos2dx_custom.ini' :('cocos2dx_custom', 'lua_cocos2dx_custom_auto') }
這樣就只會編譯這個一個文件,節約時間!!!
4.在frameworks/cocos2d-x/tools/tolua/目錄下,運行腳本
在frameworks/cocos2d-x/tools/tolua/目錄下運行cmd,然后輸入命令 Python genbindings_custom.py
成功執行genbindings.py腳本后,會在frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/目錄下,生成以下2個文件
到此我們所需要的文件都齊全了!!!!!!!
關于如何調用在下篇文章講解!
如有不足之處,請大家指出,一起交流成長!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。