1. 程式人生 > >quick-cocos2dx將C++匯出lua

quick-cocos2dx將C++匯出lua

可以按照官網教程來做。

個人總結,分為5步:

  1. 進行相關環境配置。

  2. 編寫.h .cpp檔案。

  3. 在引擎frameworks\cocos2d-x\tools\tolua目錄下重寫*.ini配置檔案與genbindings.py指令碼。

  4. 執行自定義的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

  5. 呼叫register_all_***(lua_State* tolua_S)註冊函式。

  6. 可以在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關鍵字。