创建C++自定义类让Lua脚本调用

这里将介绍使用tolua++将自定义的C++类嵌入,让lua脚本使用

一般过程:

自定义类 -> 使用tolua++工具编译到LuaCoco2d.cpp中 -> lua调用

步骤一:自定义一个C++类,我定义一个类名为:MySprite

MySprite.h

MySprite.cpp

步骤二:根据自定义类创建一个.pkg文件,我们把自定义的MySprite类定义到.pkg文件中

注意:1>,只要根据自定类.h中的内容,至于.cpp的实现,binding后lua会自动调用类的函数

   2>,书写.pkg文件时要注意几条规则,我们到tolua++文件夹中找到README文件

    

1. Generating the lua<-->C bindings with tolua++

Build scripts for windows (build.bat) and unix (build.sh) are provided
to generate the relevant files after modifying the .pkg files. These
scripts basically run the following command:

tolua++.exe -L basic.lua -o LuaCocos2d.cpp Cocos2d.pkg

This will generate the bindings file and patch it with come cocos2dx
specific modifications.

On POSIX systems you can also just run "make" to build the bindings
if/when you change .pkg files.

2. Writing .pkg files

1) enum keeps the same
2) remove CC_DLL for the class defines, pay attention to multi inherites
3) remove inline keyword for declaration and implementation
4) remove public protect and private
5) remove the decalration of class member variable
6) keep static keyword
7) remove memeber functions that declared as private or protected

这里有.pkg文件详细的书写规则

我们这里直接写一个MySprite.pkg文件,内容如下:

class MySprite : public CCSprite{

  static MySprite * createMS(const char * fileName);

}

书写好我们的.pkg文件之后,将文件放入tolua++文件夹下就可以了

步骤三:配置tolua++工具,用tolua++编译我们写的.pkg文件,将自定义类嵌入到LuaCocos2d.cpp中

我们在tolua++文件夹下找到tolua++.Mac.zip文件,并解压它得到一个tolua++的工具,如图:

解压出工具后,我们在配置tolua++的路径,用Xcode打开build.sh文件,更改俩个地方:

更改后根据各台电脑路径不一,我更改后为:

在这里TOLUA是tolua++工具的位置(路径后加上/tolua++,表示此工具),下面配置的是编译后LuaCocos2d.cpp文件导出的位置

最后,我们将定义的.pkg文件注册到tolua++文件夹下的Cocos2d.pkg中

以上都做完后,我们直接使用终端,到tolua++文件夹下,使用make命令执行tolua++工具

OK!   执行完命令后,将会在桌面上生成LuaCocos2d.cpp文件,且其中已binding好了自定义的类

将新生成的LuaCocos2d.cpp替换掉我们生成项目里的LuaCocos2d.cpp文件

注意:这时新生成的LuaCocos2d.cpp中虽然已经binding了我们的自定义类,但没有引用我们的头文件,这时我们在LuaCocos2d.h中倒入我们的自定义类名

步骤四:Lua中测试我们的自定义类

保存,command + R,成功运行且调用自定义类:

时间: 2024-11-08 16:36:51

创建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

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

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

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

Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween

在上一篇文章 Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法 中,我对LuaBehaviour脚本进行了扩展,添加了两个新的UI监听方法,也提到最好能单写一个脚本处理此事.本篇文章就来继续这个工作. 从Lua中调用C#代码 1.创建UI监听脚本 打开之前的工程,在Assets/LuaFrameworks/Scripts/Common下,创建一个UIEventEx.cs脚本,将LuaBehaviour.cs中的AddButtonClick以及AddInputFiel

cocos2dx-3.x 导出自定义类到 lua 过程

一.简介 最近正在学习cocos2d中的lua游戏开发,因为lua开发的热更新特性,大家开发游戏好像都会优先选择lua作为开发语言. 但是遇到一个问题,用lua写一些简单的程序没什么问题,但是一旦需要一个复杂的类,在lua中直接写就感觉有些吃力.所以想到,可以把游戏开发中比较复杂的模块使用c++完成,然后导出到lua,让lua可以轻松调用. 我从头到尾完整地完成了cocos2dx-3.x中自定义类的导出过程,在网上查了好多资料,也碰到了很多错误,然而网上关于这块的文章比较零散,如果有初学者使用的

LUA脚本调用C场景,使用C API访问脚本构造的表

LUA调用C lua解析中集成了一些系统服务, 故脚本中可以访问系统资源, 例如, lua脚本可以调用文件系统接口, 可以调用数学库, 但是总存在一些lua脚本中访问不到的系统服务或者扩展功能, 如果这些系统服务或者扩展功能是使用C语言实现, 那么可以, 使用lua库的对C库的封装方法, 将其中功能封装成lua 接口, 这样脚本就调用这些lua接口调用这些功能. ------- 这种情况,是以lua脚本作为宿主程序. C调用LUA 另外一种场景,是C程序作为宿主程序, 调用LUA脚本, 例如将l

创建运行时类的对象,调用指定的属性方法构造器

1 使用newInstance(),实际上是调用运行时空参的构造器    注意构造器的权限修饰符要足够,同时必须有一个空参的构造器. 2 调用指定的属性方法构造器 package lianxi1; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Meth

cocos2dx3.0导出自定义类到lua的方法详细步骤

我写了一个用3.0的工具导出类到lua,自动生成代码的方法. 以前要导出c++类到lua,就得手动维护pkg文件,那简直就是噩梦,3.0以后就会感觉生活很轻松了. 下面我就在说下具体做法.1.安装必要的库和工具包,以及配置相关环境变量,请按照cocos2d-x-3.0rc0\tools\tolua\README.mdown说得去做,不做赘述. 2.写c++类(我测试用的是cocos2d-x-3.0rc0\tests\lua-empty-test\project\Classes\HelloWorl