cocos2dx lua學習筆記 <一> quick 3.5把自訂C++類綁定到lua

來源:互聯網
上載者:User

標籤:cocos2dx   lua   

請尊重原創 轉載請著名出處:http://blog.csdn.net/wushao126/article/details/46660375
首先去官網下載最新的quick,配置好環境,建立一個lua工程,命令 cocos new XXX(項目名稱) -p com.xxxx.xxxx(包名) -l lua -d xxx(建立工程儲存路徑)

工程建立後,找到工程目錄下的frameworks\runtime-src\Classes,建立一個c++類,我建立的類是

檔案名稱:LuaBindingTest.h

#pragma onceclass LuaBindingTest{public:LuaBindingTest();~LuaBindingTest();void add(long a,long b);void sub(int a, int b);};

檔案名稱:LuaBindingTest.cpp
#include "LuaBindingTest.h"#include "cocos2d.h"USING_NS_CC;LuaBindingTest::LuaBindingTest(){}LuaBindingTest::~LuaBindingTest(){}void LuaBindingTest::sub(int a, int b){CCLOG("a - b = %d", a - b);}void LuaBindingTest::add(long a, long b){CCLOG("a + b = %ld", a + b);}


之後在工程目錄下的frameworks\cocos2d-x\tools\tolua檔案夾中找到genbindings.py檔案夾,備份一份,改名genbindings_binding_test.py,開啟此檔案,需要修改內容,定位大約在130行之後,找到內容類別似

        tolua_root = '%s/tools/tolua' % project_root        output_dir = '%s/../runtime-src/Classes/auto' % project_root        cmd_args = {'myclass.ini' : ('myclass', 'lua_myclass_auto'),                     'cocos2dx_extension.ini' : ('cocos2dx_extension', 'lua_cocos2dx_extension_auto'),                     'cocos2dx_ui.ini' : ('cocos2dx_ui', 'lua_cocos2dx_ui_auto'),                     'cocos2dx_studio.ini' : ('cocos2dx_studio', 'lua_cocos2dx_studio_auto'),                     'cocos2dx_spine.ini' : ('cocos2dx_spine', 'lua_cocos2dx_spine_auto'),                     'cocos2dx_physics.ini' : ('cocos2dx_physics', 'lua_cocos2dx_physics_auto'),                     'cocos2dx_experimental_video.ini' : ('cocos2dx_experimental_video', 'lua_cocos2dx_experimental_video_auto'),                     'cocos2dx_experimental.ini' : ('cocos2dx_experimental', 'lua_cocos2dx_experimental_auto'),                     'cocos2dx_controller.ini' : ('cocos2dx_controller', 'lua_cocos2dx_controller_auto'),                     'cocos2dx_cocosbuilder.ini': ('cocos2dx_cocosbuilder', 'lua_cocos2dx_cocosbuilder_auto'),                     'cocos2dx_cocosdenshion.ini': ('cocos2dx_cocosdenshion', 'lua_cocos2dx_cocosdenshion_auto'),                     'cocos2dx_3d.ini': ('cocos2dx_3d', 'lua_cocos2dx_3d_auto'),                     'cocos2dx_audioengine.ini': ('cocos2dx_audioengine', 'lua_cocos2dx_audioengine_auto'),                     'cocos2dx_csloader.ini' : ('cocos2dx_csloader', 'lua_cocos2dx_csloader_auto'),                     }
tolua_root 就是ini檔案所在目錄,過會我們就要在這個目錄下建立我們的ini檔案。

output_dir 是我們要產生的目標檔案所在的檔案目錄,我把這個修改在classes目錄下auto

這是我修改後的檔案內容

        tolua_root = '%s/tools/tolua' % project_root        output_dir = '%s/../runtime-src/Classes/auto' % project_root        cmd_args = {'myclass.ini' : ('myclass', 'lua_myclass_auto'),                     }

myclass.ini就是接下來要建立的ini檔案

隨便複製一個ini檔案,改名為myclass.ini,開啟檔案,修改幾個參數即可

prefix = myclass   

target_namespace =   (空 表示沒有)

headers = %(cocosdir)s/../runtime-src/Classes/LuaBindingTest.h  (需要綁定c++類的標頭檔路徑)

classes = LuaBindingTest (類名)

skip = (對lua隱藏的介面)

修改好了之後儲存檔案。接著要配置環境

找到此目錄下的README.mdown檔案,開啟

按照上面安裝好,做好,關於cheetah這個,直接拷貝檔案夾,別進入目錄內把所有檔案散著放到C:\Python27\Lib\site-packages

ndk r9b版本以上就好了

環境配置好後

執行 python genbindings_binding_test.py命令

你會在你的output_out 路徑上看到了產生的檔案,api檔案夾,一個hpp,一個cpp。如果咩產生,就要檢查下是不是出錯環節。

註冊

開啟AppDelegate.cpp,加入hpp標頭檔

AppDelegate::applicationDidFinishLaunching方法中,在lua_module_register(L);下,複製剛才產生的hpp中register_all_myclass(L);

這就註冊好了。


調用

    local p = LuaBindingTest.new(0)
    p:add(4,1)
    p:sub(2,1)

OVER





著作權聲明:本文為博主原創文章,轉載請著名出處。

cocos2dx lua學習筆記 <一> quick 3.5把自訂C++類綁定到lua

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.