Lua调用自定义C++类

2015年03月23日 16:36 0 点赞 0 评论 更新于 2025-11-21 18:20

本文将详细介绍在 Windows 7 + VS2013 + Cocos Code IDE 环境下,使用 Cocos Code IDE 创建的 Lua 项目中,实现自定义 C++ 类绑定的具体步骤。

1. 放置自定义 C++ 代码

将自定义的 C++ 代码放置在 frameworks\runtime-src\Classes 目录下。当然,存放位置可以根据个人喜好进行调整,不过这里推荐放在 Classes 目录下,方便统一管理。

2. 添加自定义类的 .ini 文件

frameworks\cocos2d-x\tools\tolua 目录中,复制该文件夹下 cocos2dx.ini 的配置信息,然后根据自定义类的情况修改一些参数。以下是需要修改的参数配置:

[custom_api]
# prefix会被添加到生成的函数,你也可以选择不添加这个到你的模板
prefix = custom_api
# 所有的类都会嵌入到这个命名空间
target_namespace = my
# 类所在的路径,如果有多个,用空格隔开
headers = %(cocosdir)s/../runtime-src/Classes/PanZoomLayer.h
# 需要注册的类,如果有多个,用空格隔开
classes = PanZoomLayer
# 不提供给Lua的public成员函数
skip = PanZoomLayer::[onTouchesBegan onTouchesMoved onTouchesEnded init onEnter onExit update]
# 这些参数保持为空即可
rename_functions =
rename_classes =
remove_prefix =
classes_have_no_parents =
base_classes_to_skip =
abstract_classes =
script_control_cpp = no

3. 在 genbindings.py 中添加自定义的配置 .ini

frameworks\cocos2d-x\tools\tolua 目录下的 genbindings.py 文件中,找到第 129 行的 cmd_args。将自定义的 custom_api.ini 添加进去,并注释掉其他 .ini 文件(这些文件已经不需要重新生成)。

4. 运行 genbindings.py 脚本

在终端运行 genbindings.py 脚本。为了方便操作,你可以直接编写一个批处理文件 .bat 来执行该脚本。需要注意的是,只要所需的工具都已下载、安装并正确配置,一般都能成功生成。如果生成失败,基本都是因为工具配置存在问题。

生成成功后,在 frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto 目录中会找到生成的 C++ 桥接文件 lua_custom_api_auto.cpplua_custom_api_auto.hpp。其中,lua_custom_api_auto.hpp 中的 register_all_custom_api 函数是将 PanZoomLayer 类注册到 Lua 环境的关键函数。此外,在 frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto\api 目录中也能找到提供给 Lua 调用的接口文件。

5. 编译并注册到 Lua

注册自定义类的函数可以在 lua_custom_api_auto.hpp 中找到,具体为 register_all_custom_api(lua_State* tolua_S)。接下来,使用 VS2013 打开 frameworks\runtime-src\proj.win32 目录下的工程,并按照以下步骤进行操作:

  1. 将自定义的类 PanZoomLayer 添加到项目工程的 Classes 目录下。
  2. lua_custom_api_auto.cpplua_custom_api_auto.hpp 添加到工程 libluaauto 目录下。
  3. 添加 lualib 工程的文件搜索路径,将 $(EngineRoot)../runtime-src/Classes 路径添加进去。
  4. 编辑 frameworks\runtime-src\Classes 目录下的入口类 AppDelegate.cpp
    • 添加 lua_custom_api_auto.hpp 头文件。
    • 注册 register_all_custom_api(state) 函数。需要注意的是,register_all_custom_api 函数上下的两句话必须添加。
  5. 编译并运行整个项目,完成 C++ 类到 Lua 的注册。

完成以上步骤后,就可以在 Lua 中愉快地使用自定义的类了!

作者信息

menghao

menghao

共发布了 3994 篇文章