1. 程式人生 > >quick-cocos2dx 3.3 c++繫結到Lua

quick-cocos2dx 3.3 c++繫結到Lua

網上帖子很多 參照了幾篇 才搞定

1:注意事項  電腦上Python 不要裝多個版本(2.x 3.x同時安裝)   本帖子需要的版本是2.7.x,最好是2.7.6,如果同時安裝了3.x的話 會有各種問題

2:新建c++ 檔案

frameworks\runtime-src\Classes\下邊建立

 MyLuaBridge.h 

#pragma once
#include "cocos2d.h"


class MyLuaBridge : public cocos2d::Ref
{
public:
MyLuaBridge(void);
~MyLuaBridge(void);
static MyLuaBridge * getInstance();
static MyLuaBridge * myLuaBridge;
void showErrorAlert(std::string msg);
};

MyLuaBridge.cpp

#include "MyLuaBridge.h"
MyLuaBridge* MyLuaBridge::myLuaBridge = nullptr;
MyLuaBridge::MyLuaBridge(void)
{
}
MyLuaBridge::~MyLuaBridge(void)
{
}
MyLuaBridge * MyLuaBridge::getInstance()
{
if (!myLuaBridge)
{
myLuaBridge = new (std::nothrow) MyLuaBridge();
CCASSERT(myLuaBridge, "FATAL: Not enough memory");
}
return myLuaBridge;
}
void MyLuaBridge::showErrorAlert(std::string msg)
{
cocos2d::MessageBox(msg.c_str(),"Error");
}

3:編寫ini檔案 

frameworks\cocos2d-x\tools\tolua 新建MyLuaBridge.ini檔案 拷貝其他ini檔案內容然後稍作改動即可

prefix = MyLuaBridge

target_namespace = cc

headers = %(cocosdir)s/../runtime-src/Classes/MyLuaBridge.h

classes = MyLuaBridge

skip = 

這部分網上有很多帖子

4:更改python指令碼

'MyLuaBridge.ini' : ('MyLuaBridge', 'lua_MyLuaBridge_auto'), \
#                    'cocos2dx_assetsmanager.ini' : ('cocos2dx_assetsmanager', 'lua_cocos2dx_assetsmanager_auto'), \

把新建的ini加進去

然後執行指令碼 不出意外的話 就能成功

5:

frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto 裡邊會生成lua_MyLuaBridge_auto.cpp lua_MyLuaBridge_auto.hpp兩個檔案

然後在vs工程中libluacocos2d 把這兩個檔案 加入到 auto中,由於cpp檔案中包含了#include "MyLuaBridge.h" 這個標頭檔案,所以得把$(EngineRoot)\..\runtime-src\Classes這個路徑加入到包含目錄中,不然vs找不到.h檔案會報錯

6:

此時編譯不出意外能正常通過,然後就是註冊

appdelegate.cpp中 新增#include "lua_MyLuaBridge_auto.hpp"  

register_all_MyLuaBridge(L);

編譯新的player 即可使用

7:lua呼叫

cc.MyLuaBridge:getInstance():showErrorAlert("HelloWorld");