热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cocos2dxlua绑定之一:自动绑定自定义类中的函数

cococs2dx3.13.1+vs2013+win101.首先定义C++类Student在cocos2d-x\cocos文件夹下新建一个user_define的文件夹放置两个文件。

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
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 绑定之二:手动绑定自定义类中的函数》


推荐阅读
author-avatar
web+php
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有