cocos2dx lua 綁定之二:手動綁定自定義類中的函數


cococs2dx 3.13.1 + vs2013 + win10

1.首先按照《cocos2dx lua 綁定之一:自動綁定自定義類》綁定Student類

 

2.在Student類中增加一個用於測試手動綁定的函數manual_call

①Student.h中增加函數

    //手動綁定調用函數
    void manual_call();

②Student.cpp中增加函數實現

//和自動綁定相比,只增加了這個函數
void Student::manual_call() { std::cout << " manual call function " << std::endl; }

 

3.在libluacocos2d項目中新增兩個手動綁定的處理文件lua_cocos2dx_student_manual.h和lua_cocos2dx_student_manual.cpp

 

①lua_cocos2dx_student_manual.h

#pragma once #ifdef __cplusplus extern "C" { #endif #include "tolua++.h" #ifdef __cplusplus } #endif TOLUA_API int register_student_moudle(lua_State* L);

 

②lua_cocos2dx_student_manual.cpp

#include "scripting/lua-bindings/manual/user_define/lua_cocos2dx_student_manual.hpp" #include "scripting/lua-bindings/auto/lua_userdefine_student_auto.hpp" #include "user_define/Student.h" #include "scripting/lua-bindings/manual/tolua_fix.h" #include "scripting/lua-bindings/manual/LuaBasicConversions.h" #include "scripting/lua-bindings/manual/cocos2d/LuaScriptHandlerMgr.h" #include "scripting/lua-bindings/manual/CCLuaValue.h" #include "scripting/lua-bindings/manual/CCLuaEngine.h" #include "base/CCEventListenerFocus.h"

//調用函數
static int tolua_student_test_function(lua_State* L) { if (nullptr == L) return 0; Student** s = (Student**)luaL_checkudata(L, 1, "Student"); luaL_argcheck(L, s != NULL, 1, "invalid user data"); (*s)->manual_call(); return 0; } //注冊函數
static void regist_student_manual_functions(lua_State* L) { //找到對應自動注冊的類
    lua_pushstring(L, "Student"); lua_rawget(L, LUA_REGISTRYINDEX); if (lua_istable(L,-1)) { tolua_function(L, "manual_call", tolua_student_test_function); //將函數綁定到Student類中
 } lua_pop(L, 1); } int register_student_moudle(lua_State* L) { lua_getglobal(L, "_G"); if (lua_istable(L,-1))//stack:...,_G,
 { register_all_userdefine_student(L); regist_student_manual_functions(L); } lua_pop(L, 1); return 1; }

 

4.將函數注冊到lua中,找到libluacocos2d項目中

①在CCLuaStack.cpp文件增加頭文件引用

#include "scripting/lua-bindings/manual/user_define/lua_cocos2dx_student_manual.hpp"

②在init函數里增加函數注冊到Lua

先屏蔽注冊自動函數的相關代碼,使用register_student_moudle同時注冊自動綁定和手動綁定的函數

//register_all_userdefine_student(_state);
register_student_moudle(_state);

 

5.重新編譯項目,在Lua里使用

local student = Student:new() student:manual_call()

 

6.如果不使用自動綁定,全部使用手動綁定,可參考下面兩篇文章直接進行綁定

 

Lua和C++交互 學習記錄之八:C++類注冊為Lua模塊

Lua和C++交互 學習記錄之九:在Lua中以面向對象的方式使用C++注冊的類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM