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 = 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()

时间: 2024-10-11 10:50:37

cocos2dx lua 如何自动绑定自定义类的相关文章

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 <&

【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之二】新建项目中配制环境

查看[Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之一]环境搭建,想必你的环境已经准备好了. 在<[Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之一]环境搭建>中,为何最后一步是在Quick引擎中去完成绑定C++至Lua的脚本呢? 原因是引擎帮我们设置好了引擎已有类文件绑定的一系列环境,但是我们不可能在引擎的源模版中去开发我们的项目,而是通过引擎模版创建我们自已独立的新项目,而当我们创建自已的新项目时,我们知道,新的项目会从源模版引擎中,将一些可能用到的

【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之四】使用绑定C++至Lua的自定义类

续[Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之三]动手绑定自定义类至Lua 之后,我们已经完成了自定义类至Lua的绑定.在接下来的环节,我们将使用它. 首先,我们需要确定,通过Python脚本我们生成了哪些绑定文件?我们罗列一个表单. // Path : F:\Cocos2dx-Lua\Garfield\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto 1. lua_pet_auto.hpp // Path : 

【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之三】动手绑定自定义类至Lua

查看[Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之二]新建项目中配制环境,我们完美的在新建项目中完成了绑定需要的环境,接下来才是最关健的一步.绑定自定义C++类至Lua. 事实上引擎为了方便我们应对不同平台,已经帮我们创建了不同平台的工程项目.为了编辑代码方便,我使用VS2013打开了"runtime-src"文件夹下的"proj.win32"工程. 前往项目录径"F:\Cocos2dx-Lua\Garfield\frameworks

slf4j自动绑定实现类原理

slf4j自动绑定实现类的方式基于约定:它要求你在实现类的包名和拿到LoggerFactory实例的文件路径必须是:org/slf4j/impl/StaticLoggerBinder.class 有了这个约定就好办了,slf4j在自己的基本类LoggerFactory里,直接调用实现类StaticLoggerBinder拿到LoggerFactory的实例 看代码:下面是我自己实现的一个:StaticLoggerBinder public class StaticLoggerBinder { p

slf自动绑定实现类过程判断

按照绑定实现类的方式是基于约定原则:判断分以下几个步骤 1.LoggerFactory扫描实现类路径有几个实现类,即在org/slf4j/impl/下有几个StaticLoggerBinder.class 2.如果有多个实现类,向开发人员报告多个实现类的路径 3.如果有多个实现类,向开发人员报告真正绑定的是哪一个实现类 4.如果没有实现类,怎么办? 具体代码实现 //要扫描的文件路径 private static String STATIC_LOGGER_BINDER_PATH = "org/s

cocos2dx 2.x版本:简化提炼tolua++绑定自定义类到lua中使用

cocos2dx的3.x版本已经提供了更好地绑定方式,网上有很多相关的教程,这里给一个链接:http://www.cocoachina.com/bbs/read.php?tid=196416. 由于目前我们的项目使用的是2.x版本的,且已经开发了一半了,这时候不适合转3.x的版本,于是只能用2.x的老方法tolua++来实现绑定.这就有一个蛋疼的问题,太麻烦!每次都要写pkg.使用tolua++.exe解释器编译生成新的cpp,在其中添加自己的类的头文件引用,然后把这个新的cpp文件覆盖到lib

【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之一】环境搭建

* 确定你安装了Android NDK R9B 版本 ,如果没有前往以下地址下载. ( https://dl.google.com/android/ndk/android-ndk-r9b-linux-x86_64.tar.bz2) from (http://developer.android.com/tools/sdk/ndk/index.html) * 前往 (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi)下载Python2.7

【Cocos2d-x Lua】http工具类封装

实现 该工具类对Cocos2d-x中的HttpClient进行了封装,使可以在Lua中实现http异步请求. LuaHttpClient.h #ifndef __LUAHTTPCLIENT_H__ #define __LUAHTTPCLIENT_H__ #include "cocos2d.h" USING_NS_CC; #include "cocos-ext.h" USING_NS_CC_EXT; // 参数封装类 class LuaParams{ public: