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

2015年03月19日 12:09 0 点赞 0 评论 更新于 2025-11-21 17:43

本文将详细讲解如何使用tolua++将自定义的C++类嵌入到Lua环境中,以便让Lua脚本能够调用这些自定义类。

一般过程

整个流程可以概括为:自定义类 -> 使用tolua++工具编译到LuaCoco2d.cpp中 -> Lua调用。

步骤一:自定义一个C++类

这里我们定义一个名为MySprite的类。相关代码文件如下:

  • MySprite.h:该文件包含类的声明。
  • MySprite.cpp:该文件包含类的具体实现。

步骤二:根据自定义类创建一个.pkg文件

我们需要把自定义的MySprite类定义到.pkg文件中。

注意事项

  1. 只需依据自定义类的.h文件内容编写.pkg文件,因为绑定(binding)后Lua会自动调用类的函数,无需关注.cpp文件的具体实现。
  2. 书写.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文件的规则
  3. enum保持不变。
  4. 类定义中移除CC_DLL,注意多重继承的情况。
  5. 声明和实现中移除inline关键字。
  6. 移除publicprotectedprivate访问修饰符。
  7. 移除类成员变量的声明。
  8. 保留static关键字。
  9. 移除声明为privateprotected的成员函数。

示例.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运行脚本。如果能够成功运行并调用自定义类,说明整个流程配置成功。

作者信息

boke

boke

共发布了 3994 篇文章