问题标签 [luabind]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1745 浏览

c++ - 使用 luabind 绑定派生类的函数

我目前正在用 C++ 开发一个基于插件的系统,它提供了一个 Lua 脚本接口,我选择使用 luabind。我正在使用 Lua 5 和 luabind 0.9,它们都是静态链接并使用 MSVC++ 8 编译的。当在派生类而不是其父类中定义函数时,我现在无法将函数与 luabind 绑定。

更具体地说,我有一个名为“IPlugin”的抽象基类,所有插件类都从该基类继承。当插件管理器初始化时,它会像这样注册该类及其函数:

因为只有在运行时才知道有哪些有效的插件类可用,所以我不得不以一种迂回的方式解决加载插件的问题。插件管理器向 Lua 公开了一个工厂函数,它采用插件类的名称和所需的对象名称。然后,工厂创建对象,将插件的类注册为继承自“IPlugin”基类,并立即在创建的对象上调用一个函数,该对象将自身注册为具有 Lua 状态的全局对象,如下所示:

我最初这样做是因为我在 Lua 确定对象的最派生类时遇到了问题,就好像我从插件管理器中注册它一样,它只被称为“IPlugin”的子类型,而不是特定的子类型。我不确定这是否有必要,但它可以工作,随后可以从 Lua 的“a_name”下访问创建的对象。

但是,我遇到的问题是,在派生类中定义的函数根本没有在父类中声明,不能使用。基类中定义的虚函数,例如上面的“start”,可以正常工作,并且在新对象上从 Lua 调用它们会运行“PluginExample”类中各自重新定义的代码。但是,如果我向“PluginExample”添加一个新函数,例如一个不带参数并返回 void 的函数,并像这样注册它:

在新对象上调用 'func' 会产生以下 Lua 运行时错误:

我正确地使用了 ':' 语法,所以不需要 'self' 参数,而且 Lua 似乎突然无法确定对象的派生类型了。我确定我做错了什么,可能与我的系统架构所需的两步绑定有关,但我不知道在哪里。我非常感谢一些帮助 =)

0 投票
1 回答
1011 浏览

c# - 将 Luabind 转换为 C#?

有没有人尝试将 Luabind 转换为 C#?这样的事情甚至可能吗?

我有一个要转换的应用程序,以便它可以在完全托管的环境中运行,但是大多数游戏逻辑都依赖于 Lua 脚本,并且该应用程序使用 Luabind 来管理来回。我对 Lua 或 Luabind 不够熟悉,不知道其中涉及到什么。

我在这里做傻事吗?

0 投票
1 回答
2804 浏览

c++ - 如何遍历 luabind 类(在 lua 或 C++ 中)?

如何遍历 luabind 类(在 lua 或 C++ 中)?

谢谢

0 投票
1 回答
575 浏览

class - 如何覆盖 luabind 类 __finalize 方法?

如何覆盖 luabind 类__finalize方法?

尝试以这种方式执行此操作:

但是 lua 仍然只调用原始终结器。但是它确实适用于 __init 方法:

我还尝试覆盖 getmetatable(A).__finilize。也无济于事。

我怎样才能覆盖它?提前致谢。

0 投票
2 回答
725 浏览

c++ - MSVC 10 + Luabind + std::vector == 拒绝编译

所以,我有一个代码,它是在 MSVC 9 和一些以前的版本上编译的(不知道它有多远……),GCC,MingW,Mac 上的 GCC……

但是有一行,不能在 MSVC 上编译:

如果我评论它,应用程序编译得很好(但在运行时中断),如果我将此块移动到其他地方(甚至在其他文件中),这个特定的行会不断给出错误......改变块内的顺序也不能解决它。

它给出了 9 个错误,其中大多数是关于 .def 中参数数量错误的错误(有人说当它期望 1、3、5 时有 2 个参数,一个说“参数太多”),还有一些关于重载失败,最明显一:

错误 7 错误 C2914: 'luabind::class_::def' : 无法推断模板参数,因为函数参数不明确 E:\novashellSVN\clanlibstuff\novashell\source\ListBindings.cpp 178

这让我浪费了整个工作日......有人知道MSVC 10上发生了什么变化导致这种情况吗?它甚至不再因为工作卡住而困扰我,而是因为它是多么令人费解和奇怪。

编辑:我将来自 MSVC 10 的“矢量”文件与其他 MSVC 和 GCC 进行了比较,实际上在 MSVC 中它有 3 个版本,有人知道我是如何让它加载特定版本的吗?

三个版本:

0 投票
1 回答
1116 浏览

c - Lua 关闭/程序执行结束回调

我正在为 Lua 编写一个模块。在关闭 lua 解释器时,即使用户忘记隐式调用关闭例程,它也必须运行清理例程。

该模块主要是用 C 语言编写的。

我应该使用 Lua C Api 中的什么回调来检测程序执行结束?我想到的唯一想法是在代表我的模块的表上使用 __gc 元方法。有任何想法吗?

0 投票
1 回答
2543 浏览

c++ - 将现有 C++ 对象传递给 Lua 并调用传递对象的成员函数

我正在做一个小模拟项目,它使用 Lua 来驱动单个单元(蚂蚁)的行为,并使用 Luabind 将 C++ 和 Lua 端粘合在一起。每个单独的蚂蚁(有不同的类型,派生自基类 Ant)都有一个 Run() 函数,它调用相应的脚本;然后脚本执行任何需要采取的行动,调用公开的类函数和可能的自由函数。我已经获得了 Run 函数(在 C++ 中)以在 Lua 脚本中成功执行匹配的 Run 函数(此时它只打印一些文本)。

lua只是一个从脚本中检索函数的管理器类。以上是在 Lua 文件中调用以下内容:

对于 AntQueen 类,Luabind 注册看起来像这样:

它现在的设置方式是通过一个简单的工厂/管理器创建、删除和找到蚂蚁。每个蚂蚁都可以通过调用来检索,static Ant* AntFactory::GetAntByID(const int ID)它只在哈希映射中找到蚂蚁并返回指向蚂蚁的指针。我想要做的是让 Lua 能够执行以下操作:

以上只是一个虚构的例子,但希望它显示了我想要实现的目标。我不希望 Lua 垃圾收集对象,因为它们已经在 C++ 端进行管理。在测试所有内容时,任何尝试执行以下操作:

在 Lua 中导致abort()被调用并且程序崩溃和燃烧。

我似乎错过了一切如何来回穿梭的东西(这是我第一次尝试将 Lua 和 C++ 粘合在一起,超越玩具程序)。我很确定传递一个普通的指针不是这样做的方法。lightuserdata 似乎是我正在寻找的东西,但它也有很多限制。

总结一下:这里发生了什么导致abort被调用,我如何使用 Luabind/Lua C API 获取指向传递给 Lua 的 C++ 对象的指针,并在该指针上调用成员函数,就好像它是一个对象一样(不让 Lua 垃圾收集它)?

0 投票
2 回答
666 浏览

c++ - luabind 何时释放创建的对象?

我在使用 luabind 时遇到问题。我定义了一个 std::map 来分配在 lua 中创建的对象。我以这种方式将此地图作为全局对象发布在 lua 中:

之后,这个对象被用在lua中的一个函数中,其中许多对象被创建并插入到这个映射中。当 lua 函数结束并且 luabind 将控制权返回给 C++ 端程序时,问题就出现了,因为映射的所有内容都会自动丢失。

我正在寻找错误。我让 lua 上下文保持活动状态,所以这个对象必须存在。

你可以帮帮我吗??

非常感谢 :)

0 投票
2 回答
2170 浏览

c++ - 需要帮助才能开始在 C++ 游戏中集成 lua

我需要帮助将 lua 集成到我的游戏中。我对 lua 知之甚少,因为我刚开始学习脚本(一般来说)。我已经阅读了有关 lua 的教程,但其中大多数只是告诉我如何在 c++ 代码中绑定 lua(我已经设法用 LuaBind 做到了),或者解释了 lua 中的功能。

假设我有一个“玩家”类和“障碍”类。障碍类具有以下功能:

onTouchPlayer 和 onUpdate 旨在根据脚本表现不同。

让我困惑的是在脚本中要写什么,以及如何在 c++ 中调用它?如果我已经使用 LuaBind 将 Player 类导出到 Lua,例如,我如何在 onTouchPlayer() 处杀死玩家并使用 lua 在 onUpdate 函数中随机移动障碍物?

0 投票
2 回答
992 浏览

c++ - 游戏NPC多动作lua脚本设计

我需要将可编写脚本的 NPC 放入我当前的游戏项目中。项目本身是用 C++ 语言开发的。我将使用 Luabind 来绑定 lua 和 c++。

当某些 NPC 点击或计时器被激活时,我需要调用 NPC 函数。目前我停留在 2 个 NPC 脚本设计之间。

  1. 使用一种 npcname_action 来区分每个 NPC。
    给每个不同的NPC起名字有点麻烦。
    我仍在考虑如何在我的项目中实现这一点。
    例子:

    /li>
  2. 使用函数名。
    每个 npc 都有自己的 lua 文件。
    我正在考虑将脚本加载到内存中,并在需要时luaState使用luaL_loadbuffer
    示例加载:

    /li>

哪个更好,为什么?