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 ...
随机推荐
- Python概念-上下文管理协议中的__enter__和__exit__
所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_va ...
- python之udp协议的套接字
udp是无链接的,先启动哪一端都不会报错 udp服务端 1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 ...
- 集合框架-Map集合
* Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...
- 为什么说 HashMap 是非线程安全的?
我们在学习 HashMap 的时候,都知道 HashMap 是非线程安全的,同时我们知道 HashTable 是线程安全的,因为里面的方法使用了 synchronized 进行同步. 但是 HashM ...
- 【Python31--pickle函数】
一.含义 1.pickle的实质是什么 答:利用一些算法把数据对象转换成“二进制文件”,存储在硬盘上,当然也可以放在数据库或者是另外一台计算机上 2.存放:picking,读取:unpicking 3 ...
- 【python--函数解读】
1.strip()函数:用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列(包括'\n', '\r', '\t', ' ') 注意: 该方法只能删除开头或是结尾的字符,不能删除中间部分的 ...
- 学习模型-视图-控制器MVC模式
1.MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分 ...
- 【做题】CF388D. Fox and Perfect Sets——线性基&数位dp
原文链接https://www.cnblogs.com/cly-none/p/9711279.html 题意:求有多少个非空集合\(S \subset N\)满足,\(\forall a,b \in ...
- (转)Shiro学习
(二期)13.权限框架shiro讲解 [课程13]自定义Realm.xmind36.8KB [课程13]用户授权流程.xmind0.2MB [课程13]shiro简介.xmind0.3MB [课程13 ...
- C# DateTime判断时间
两种情况: 1 DateTime? dtTemp = null; if(dtTime != null) { //wawawa } 刚刚学会的,可空值类型,可判断是否赋值 2 DateTime dtTe ...