怎样创建C++自定义类让Lua脚本调用
本文将详细讲解如何使用tolua++将自定义的C++类嵌入到Lua环境中,以便让Lua脚本能够调用这些自定义类。
一般过程
整个流程可以概括为:自定义类 -> 使用tolua++工具编译到LuaCoco2d.cpp中 -> Lua调用。
步骤一:自定义一个C++类
这里我们定义一个名为MySprite的类。相关代码文件如下:
MySprite.h:该文件包含类的声明。MySprite.cpp:该文件包含类的具体实现。
步骤二:根据自定义类创建一个.pkg文件
我们需要把自定义的MySprite类定义到.pkg文件中。
注意事项
- 只需依据自定义类的
.h文件内容编写.pkg文件,因为绑定(binding)后Lua会自动调用类的函数,无需关注.cpp文件的具体实现。 - 书写
.pkg文件时,要遵循以下规则。我们可以到tolua++文件夹中找到README文件获取详细信息:- 生成lua<->C绑定
- 为了在修改
.pkg文件后生成相关文件,提供了Windows的构建脚本build.bat和Unix的构建脚本build.sh。这些脚本本质上运行的是以下命令:tolua++.exe -L basic.lua -o LuaCocos2d.cpp Cocos2d.pkg此命令将生成绑定文件,并应用一些Cocos2dx特定的修改。在POSIX系统中,当你更改
.pkg文件时,也可以直接运行make命令来构建绑定。 - 书写
.pkg文件的规则
enum保持不变。- 类定义中移除
CC_DLL,注意多重继承的情况。 - 声明和实现中移除
inline关键字。 - 移除
public、protected和private访问修饰符。 - 移除类成员变量的声明。
- 保留
static关键字。 - 移除声明为
private或protected的成员函数。
示例.pkg文件
下面是一个MySprite.pkg文件的示例内容:
class MySprite : public CCSprite {
static MySprite * createMS(const char * fileName);
}
书写好.pkg文件后,将其放入tolua++文件夹下。
步骤三:配置tolua++工具并编译.pkg文件
解压工具
在tolua++文件夹下找到tolua++.Mac.zip文件,并解压得到tolua++工具。
配置路径
使用Xcode打开build.sh文件,更改两个地方。由于不同电脑的路径不同,这里以一个示例说明。假设更改后如下:
TOLUA = /path/to/tolua++
# 下面配置的是编译后LuaCocos2d.cpp文件导出的位置
OUTPUT_DIR = /path/to/output
其中,TOLUA是tolua++工具的位置(路径后加上/tolua++,表示此工具),OUTPUT_DIR配置的是编译后LuaCocos2d.cpp文件导出的位置。
注册.pkg文件
将定义的.pkg文件注册到tolua++文件夹下的Cocos2d.pkg中。
执行编译
完成上述操作后,使用终端进入tolua++文件夹,执行make命令来运行tolua++工具。执行完该命令后,将会在桌面上生成LuaCocos2d.cpp文件,其中已经绑定好了自定义的类。
替换文件
将新生成的LuaCocos2d.cpp替换掉项目中的LuaCocos2d.cpp文件。需要注意的是,新生成的LuaCocos2d.cpp虽然已经绑定了自定义类,但没有引用自定义类的头文件,因此需要在LuaCocos2d.h中引入自定义类的头文件。
步骤四:在Lua中测试自定义类
在Lua脚本中编写测试代码,保存后使用command + R运行脚本。如果能够成功运行并调用自定义类,说明整个流程配置成功。