cocos自定义类 绑定到lua

1:按照\frameworks\cocos2d-x\tools\tolua下的README.mdown的指示一步一步做下去。务必要和文件中描述的一样,我已经被这个坑爹的东西坑的很惨了。(检查这个有没有配置好的方法是:运行下那个genbindings.py,看是否能生成liblua的auto目录下的那些文件。如果能,那么你的环境配置就成功了。)

2:写一个自定义的C++类

例子:

<span style="font-family:KaiTi_GB2312;font-size:14px;">#pragma once
#include "cocos2d.h"
USING_NS_CC;
class MyClass : public Ref
{
public:
	MyClass(void);
	~MyClass(void);

	bool init() { return true; };

	CREATE_FUNC(MyClass);

	int foo(int i);
};
</span>
<span style="font-family:KaiTi_GB2312;font-size:14px;">#include "MyClass.h"

MyClass::MyClass(void)
{
}

MyClass::~MyClass(void)
{
}

int MyClass::foo(int i)

{
	return i + 100;

}
</span>

3:在\frameworks\cocos2d-x\tools\tolua目录下 可以看到很多.ini文件和一个genbindings.python文件。

随便拷贝一个.ini文件,我重命名:myclass.ini。复制一份python文件,重命名为:mygenbindings.python。

修改两个配置文件:

python文件需要做的修改:

<span style="font-family:KaiTi_GB2312;font-size:14px;"> cmd_args = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'),                     'cocos2dx_extension.ini' : ('cocos2dx_extension', 'lua_cocos2dx_extension_auto'),                     'cocos2dx_ui.ini' : ('cocos2dx_ui', 'lua_cocos2dx_ui_auto'),                     'cocos2dx_studio.ini' : ('cocos2dx_studio', 'lua_cocos2dx_studio_auto'),                     'cocos2dx_spine.ini' : ('cocos2dx_spine', 'lua_cocos2dx_spine_auto'),                     'cocos2dx_physics.ini' : ('cocos2dx_physics', 'lua_cocos2dx_physics_auto'),                     'cocos2dx_experimental_video.ini' : ('cocos2dx_experimental_video', 'lua_cocos2dx_experimental_video_auto'),                     'cocos2dx_experimental.ini' : ('cocos2dx_experimental', 'lua_cocos2dx_experimental_auto'),                     'cocos2dx_controller.ini' : ('cocos2dx_controller', 'lua_cocos2dx_controller_auto'),                     }</span>

变成:

<span style="font-family:KaiTi_GB2312;font-size:14px;">cmd_args = {
					'myclass.ini' : ('myclass', 'lua_myclass_auto'),                     }</span>

修改myclass.ini文件:

[myclass](很重要,要和文件名一样。我被这个坑了很久),这个是第一行

prefix = myclass

target_namespace = (我的没有命名空间)

headers = %(cocosdir)s/../runtime-src/Classes/MyClass.h(这是我的类路径,和AppDelegate在一起,根据你自己的路径配置吧)

classes = MyClass

后面的skip = ,rename_functions =  等等都变成空的。

这样就可以生成lua和cocos中间文件了。就像lua_cocos2dx_auto.cpp和hpp那样。由于我们在python文件中没有改变中间文件的生成路径,所以应该和lua_cocosdx_auto在同一个目录下。

将我们自定义的类进行注册,在AppDelegate.cpp文件中加入一下代码:

<span style="font-family:KaiTi_GB2312;font-size:14px;">auto engine = LuaEngine::getInstance();
	register_all_myclass(engine->getLuaStack()->getLuaState());//在这里加入这行代码</span>

这样就对我们的自定义类进行了注册。

对项目进行编译,发现会报错:

<pre name="code" class="html"><span style="font-family:KaiTi_GB2312;font-size:14px;">"int __cdecl register_all_myclass(struct lua_State *)" ([email protected]@[email protected]@@Z),该符号在函数 "public: virtual bool __thiscall AppDelegate::applicationDidFinishLaunching(void)" ([email protected]@@UAE_NXZ) 中被引用</span>

解决办法:将刚才生成的两个文件加入到liblua项目中去,重新生成liblua项目。搞定啦!!

4:在lua代码中调用我们的类吧。

在hello2.lua 的main()中加入:

<span style="font-family:KaiTi_GB2312;font-size:14px;">local test = MyClass:create()
print("the first cocos bind lua result "..test:foo(2))</span>

发现输出了我们要的答案。这样就完成了cocos自定义类绑定到lua中了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 21:38:38

cocos自定义类 绑定到lua的相关文章

cocos2dx lua学习笔记 &lt;一&gt; quick 3.5把自定义C++类绑定到lua

请尊重原创 转载请著名出处:http://blog.csdn.net/wushao126/article/details/46660375 首先去官网下载最新的quick,配置好环境,创建一个lua工程,命令 cocos new XXX(项目名称) -p com.xxxx.xxxx(包名) -l lua -d xxx(新建工程保存路径) 工程创建后,找到工程目录下的frameworks\runtime-src\Classes,创建一个c++类,我创建的类是 文件名:LuaBindingTest.

(转载)我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类

我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类 热血枫叶2015-06-19 16:27:182289 次阅读 Cocos2d-x 2.x 与 Cocos2d-x 3.x 差异(tolua++) Cocos2d-x在2.x版本里就是用toLua++和.pkg文件这么把自己注册进Lua环境里的,然而从Cocos2d-x 3.x开始,用bindings-generator脚本代替了toLua++. bindings-generator脚本的工作机制是: 1.不用编写.

Cocos2dx-lua开发之c++绑定到lua

一. 简单介绍 文章介绍是在实际的游戏开发项目中,将自定义的C++类绑定到lua中,能够让lua调用c++类.会创建一个python脚本,执行python脚本会让自动将我们的c++类绑定到lua.生成我们要的代码.文章会介绍配置环境.编写脚本.测试类.实际项目中调用,以及一些遇到的问题 二.兵马未动粮草先行 当前我用的是quicklua 3.3 win7系统.下载需要的工具 可以先看一下 \tools\tolua \README.mdown里面有详细介绍,而且都有下载地址 我现在是win系统,翻

我所理解cocos2d-x 3.6 lua -- Cocos如何绑定Lua自定义类

cocos2d-x 2.x 与 cocos2d-x 3.x 差异(tolua++) cocos2d-x在2.x版本里就是用toLua++和.pkg文件这么把自己注册进Lua环境里的,然而从cocos2d-x 3.x开始,用bindings-generator脚本代替了toLua++. bindings-generator脚本的工作机制是:        1.不用编写.pkg和.h文件了,直接定义一个ini文件,注册到Lua环境里的模块名是什么,就行了.        2.摸清了toLua++工具

【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

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

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的脚本呢? 原因是引擎帮我们设置好了引擎已有类文件绑定的一系列环境,但是我们不可能在引擎的源模版中去开发我们的项目,而是通过引擎模版创建我们自已独立的新项目,而当我们创建自已的新项目时,我们知道,新的项目会从源模版引擎中,将一些可能用到的