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


cococs2dx 3.13.1 + vs2013 + win10

 

1.首先定義C++類Student

在cocos2d-x\cocos文件夾下新建一個user_define的文件夾放置兩個文件。

注意:這個類沒有從Ref繼承,是一個簡單的C++類。

①頭文件Student.h 

 1 #pragma once
 2 
 3 #include "base/ccMacros.h"
 4 #include <iostream>
 5 #include <string>
 6 
 7 //注意這個CC_DLL,否則將出現不能找到對應函數錯誤
 8 class CC_DLL Student  9 { 10 public: 11     //構造/析構函數
12  Student(); 13     ~Student(); 14 
15     //get/set函數
16     std::string get_name(); 17     void set_name(std::string name); 18  unsigned get_age(); 19     void set_age(unsigned age); 20 
21     //打印函數
22     void print(); 23 
24 private: 25     std::string _name; 26  unsigned _age; 27 };

  

②cpp文件Student.cpp 

 1 #include "user_define/Student.h"
 2 
 3 Student::Student()  4     :_name("Empty"),  5     _age(0)  6 {  7     std::cout << "Student Constructor" << std::endl;  8 }  9 
10 Student::~Student() 11 { 12     std::cout << "Student Destructor" << std::endl; 13 } 14 
15 std::string Student::get_name() 16 { 17     return _name; 18 } 19 
20 void Student::set_name(std::string name) 21 { 22     _name = name; 23 } 24 
25 unsigned Student::get_age() 26 { 27     return _age; 28 } 29 
30 void Student::set_age(unsigned age) 31 { 32     _age = age; 33 } 34 
35 void Student::print() 36 { 37     std::cout << "name :" << _name << " age : " << _age << std::endl; 38 }

 

2.將這兩個文件加入到libcocos2d項目中

 

 

3.修改對應的ini配置文件

①在cocos2d-x\tools\tolua里copy文件cocos2dx_csloader.ini(拷貝其它文件也是可行的)並修改文件名為userdefine_student.ini

 

修改需要的字段值列表如下:

②定義在genbindings.py里使用的名字

[cocos2dx_csloader] 修改為 [userdefine_student]

③生成C++中間橋接函數的前綴

prefix = cocos2dx_csloader 修改為 prefix = userdefine_student

④Lua中使用本類的模塊前綴(我們不使用模塊前綴)

target_namespace = cc 修改為 target_namespace =

⑤頭文件的位置

headers = %(cocosdir)s/cocos/editor-support/cocostudio/ActionTimeline/CSLoader.h 修改為 headers = %(cocosdir)s/cocos/user_define/Student.h

⑥需要自動生成的類名

classes = CSLoader 修改為 classes = Student

⑦類中不生成(忽略)的函數,這里我們沒有需要忽略的函數,所以清空掉

skip = CSLoader::[nodeFromXML nodeFromProtocolBuffers createTimeline nodeWithFlatBuffers createActionTimelineNode createNodeWithDataBuffer createTimelineWithDataBuffer ^createNode$]

修改為

skip = 

 

4.修改genbindings.py文件

①在cmd_args參數將上面增加的userdefine_student.ini配置進去

ini文件的名字:(ini文件第一行[]中的參數對應,自動生成數據的文件夾名字)
'userdefine_student.ini' : ('userdefine_student', 'lua_userdefine_student_auto'), \

②如果第二個參數沒有對應上,則會產生Section not found in config file的錯誤。

 

5.運行genbindings.py重新生成C++中間橋接文件

可以在cocos2d-x\cocos\scripting\lua-bindings\auto目錄下看到自動生成的兩個文件:

lua_userdefine_student_auto.hpp和lua_userdefine_student_auto.cpp 

 

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

①將生成的兩個文件加入到項目里

 

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

#include "scripting/lua-bindings/auto/lua_userdefine_student_auto.hpp"

在init函數里增加函數注冊到Lua(在這個函數里,分別注冊了auto/manual生成的類)

register_all_userdefine_student(_state);

 

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

1     local student = Student:new() 2     student:print()

 

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


免責聲明!

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



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