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 ...
随机推荐
- daemon进程fork一次和fork两次的区别?
守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊的进程.它独立于控制终端并且周期性的执行某种任务负等待处理某些发生的事件.因为他们没有控制终端,所以说他们是在后台运行的. 守护进程的特点 ...
- 关于PRD、MRD、BRD文档
笔者现在所在的公司有专职的产品经理,在职业生涯最长的那家公司,并没有专门的产品经理,虽然在创业公司期间有产品经理,但是似乎产品经理更多的是和客户沟通需求,反馈,并不输出正规意义上产品经理该有的输出.从 ...
- shell实现每天0点备份mysql数据库
就两个文件, 本人学识尚浅,不解释,怕大佬喷. back.sh #/bin/bash MYSQLUSER=root MYSQLPWD=lizhenghua DATABASES=zskdb MYSQLD ...
- Android编译系统中的Android.bp【转】
本文转载自: 转自:http://note.qidong.name/2017/08/android-blueprint/ Android编译系统中的Android.bp.Blueprint与Soong ...
- Cmder + Babun 打造 Windows 好用的终端工具
Babun a windows shell you will love Babun features the following: Pre-configured Cygwin with a lot o ...
- NodeJs完全迁移到D盘,形成绿色安装版
查看npm配置 D:\Git\AG-Admin-v2. (master) $ npm config ls ; cli configs metrics-registry = "https:// ...
- SQL 检查 Varchar 是否能转换为 NUMERIC
https://bbs.csdn.net/topics/390480323 ISNUMERIC(size_long)=1 (IIF( ISNUMERIC(size_long)=1 AND ISNUME ...
- (转)PaperWeekly 第二十二期---Image Caption任务综述
本文转自:http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247484014&idx=1&sn=4a053986f5 ...
- 用原型封装一个操作DOM的例子
<script> // 一句话 在构造函数里面写属性 在原型里面写方法 function Elem(d){ this.even=document.getElementById(d); } ...
- Images之base image
Create a base image Most Dockerfiles start from a parent image. If you need to completely control th ...