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 = ud
⑤头文件的位置
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 = ud.Student:new() 2 student:print()