cocos2dx lua 绑定之一:自动绑定自定义类中的函数
cococs2dx 3.13.1 + vs2013 + win10
1.首先定义C++类Student
在cocos2d-x\cocos文件夹下新建一个user_define的文件夹放置两个文件。
注意:这个类没有从Ref继承,是一个简单的C++类。
①头文件Student.h
#pragma once #include "base/ccMacros.h"
#include <iostream>
#include <string> //注意这个CC_DLL,否则将出现不能找到对应函数错误
class CC_DLL Student
{
public:
//构造/析构函数
Student();
~Student(); //get/set函数
std::string get_name();
void set_name(std::string name);
unsigned get_age();
void set_age(unsigned age); //打印函数
void print(); private:
std::string _name;
unsigned _age;
};
②cpp文件Student.cpp
#include "user_define/Student.h" Student::Student()
:_name("Empty"),
_age()
{
std::cout << "Student Constructor" << std::endl;
} Student::~Student()
{
std::cout << "Student Destructor" << std::endl;
} std::string Student::get_name()
{
return _name;
} void Student::set_name(std::string name)
{
_name = name;
} unsigned Student::get_age()
{
return _age;
} void Student::set_age(unsigned age)
{
_age = age;
} void Student::print()
{
std::cout << "name :" << _name << " age : " << _age << std::endl;
}
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里使用
local student = Student:new()
student:print()

下一篇:《cocos2dx lua 绑定之二:手动绑定自定义类中的函数》
cocos2dx lua 绑定之一:自动绑定自定义类中的函数的更多相关文章
- cocos2dx lua 绑定之二:手动绑定自定义类中的函数
cococs2dx 3.13.1 + vs2013 + win10 1.首先按照<cocos2dx lua 绑定之一:自动绑定自定义类>绑定Student类 2.在Student类中增加一 ...
- 关于在App_Code文件夹自定义类中Session无法使用
由于前台页面需要调用App_Code中自定义类的函数,但在自定义类中找不到Session,解决方法如下: 新建一个类session,并自己定义函数GetSession(),引用命名空间 System. ...
- 类中成员函数与数据成员private/pubic/protected
类中成员函数与数据成员private/pubic/protected
- C++解析(16):友元与类中的函数重载
0.目录 1.友元的尴尬能力 2.类中的函数重载 3.小结 1.友元的尴尬能力 什么是友元? 友元是C++中的一种关系 友元关系发生在函数与类之间或者类与类之间 友元关系是单项的,不能传递 友元的用法 ...
- 【java&c++】父子类中同名函数的覆盖问题
java和c++两门语言对于父子类中同名函数具有不同的处理方式. 先上两段代码: C++: class Basic { public: void test(string i){ cout <&l ...
- string类中getline函数的应用
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 【cocos2d-x + Lua(1) 绑定Lua并使用tolua++】
为什么要使用Lua进行游戏开发?转载请注明出处http://www.cnblogs.com/zisou/p/cocos2dx-lua1.html 上面一个问题我觉得在我们使用Lua之前需要深入思考的, ...
- Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数
话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...
- spring自定义类中@AutoWired标识的元素注入为null
最近在做项目的时候,发现程序运行的时候有一个nullpointer exception,一脸懵逼因为感觉程序没什么逻辑.后来发现是因为new出来的component不会自动注入它的元素. 现象:@Co ...
随机推荐
- kafka学习指南(总结版)
版本介绍 从使用上来看,以0.9为分界线,0.9开始不再区分高级/低级消费者API. 从兼容性上来看,以0.8.x为分界线,0.8.x不兼容以前的版本. 总体拓扑架构 从上可知: 1.生产者不需要访问 ...
- mysql 水平分表技术
这里做的是我的一个笔记. 水平分表比较简单, 理解就是: 合并的表使用的必须是MyISAM引擎 表的结构必须一致,包括索引.字段类型.引擎和字符集 数据表 user1 CREATE TABLE `us ...
- LVS+Keepalived+Mysql+主备数据库架构[4台]
这是一个坑...磨了不少时间.见证自己功力有待提升... 架构图 数据库 1.安装数据库 这块不难, 直接引用:mysql安装 2.数据库主备 这块不难, 直接引用: mysql主备 虚拟VIP 重点 ...
- TensorFlow 生成 .ckpt 和 .pb
原文:https://www.cnblogs.com/nowornever-L/p/6991295.html 1. TensorFlow 生成的 .ckpt 和 .pb 都有什么用? The . ...
- media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面
一.media ''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务 ...
- topcoder srm 706 div1
1.给定一个迷宫,点号表示不可行,井号表示可行.现在可以改变其中的一些井号的位置.问最少改变多少个井号可以使得从左上角到右下角存在路径. 思路:设高为$n$,宽为$m$,若井号的个数$S$小于$n+m ...
- 碎碎念android eMMC【转】
本文转载自:https://blog.csdn.net/Fybon/article/details/44242549 一./dev/blockroot@:/dev/block #ls bootdevi ...
- Miller_Rabin整理笔记
目录 问题 别的 正事 代码 问题 一个数到底是不是素数 别的 首先列一下我们可以求素数的东西 根号暴力求 \(O(nloglogn)\)的埃氏筛 \(O(n)\)的欧拉筛 还有我们要学习的Mille ...
- 三部排序|2013年蓝桥杯B组题解析第六题-fishers
三部排序| 一般的排序有许多经典算法,如快速排序.希尔排序等. 但实际应用时,经常会或多或少有一些特殊的要求.我们没必要套用那些经典算法,可以根据实际情况建立更好的解法. 比如,对一个整型数组中的数字 ...
- (转) How a Kalman filter works, in pictures
How a Kalman filter works, in pictures I have to tell you about the Kalman filter, because what it d ...