问题标签 [luabridge]
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.
c++ - LuaBridge 没有正确创建构造函数
我使用 LuaBridge 将一些类和函数移植到 Lua。我目前正在调试,我总是得到
这是 main.lua :
这是 TexVector 的初始化代码:
AFAIK 是 :new Lua-“类”的构造函数。初始化或 Lua 脚本有问题吗?
c++ - LuaBridge 和成员函数
我今天刚刚下载 了 LuaBridge,到目前为止对它非常满意。我注意到的一件事是,我能够规避将 lua_State 作为函数参数的正常要求。
我可以做这个:
它会工作得很好,但如果我做任何事情:
我在文档中读到的任何内容都没有表明无法注册具有非 lua_State 参数的成员函数,而且我已经看到一些 LuaBridge 代码可以毫无问题地做到这一点。我在这里做错了什么?
c++ - Lua OOP 函数没有被调用?
我在 Allegro 5 中使用 Lua 和 LuaBridge。我决定将所有图形对象移植到 Lua,但遇到了一些问题:
被调用一次的字符类
从主程序调用函数的 Lua 脚本:
所以基本上,脚本用适当的坐标和图像初始化角色,并绘制它,但要么没有调用逻辑(它在逻辑循环中),要么改变 X 坐标的函数有问题。
此外,任务管理器建议每个周期存在约 30 KB 的内存泄漏,当我在 C++ 中使用图像对象时没有发生这种情况。
下面是通过 LuaBridge 导出到 Lua 的 Bitmap 结构的片段,以备不时之需:
更新:我能够弄清楚的一件事是内存泄漏来自CoreLogic;我在 C++ 中注释掉了对它的调用,内存泄漏消失了,但是当我保持调用不变,但注释掉CoreLogic的内容时,泄漏仍然存在。嗯……
第二次更新:内存泄漏已被缩小到与人工智能有关的东西,我没有发布:
在CoreLogic函数中,它会调用Foo.AI:DoBehavior(),这完全没有做任何事情并导致内存泄漏。
c++ - 使用带有指向内置类型的指针的 LuaBridge
让我们考虑以下 C 函数:
如何使用 LuaBridge 在 Lua 中公开它?所有文档和示例都说明了指向对象是类的复杂情况,但我找不到如何处理这样一个简单的情况......
简单的方法(即luabridge::getGlobalNamespace(L).addFunction("test", &returnMultipleValuesByPointer))
编译但不理解将通过地址传递的值。
c++ - LuaBridge 回调(将 lua 函数传递给 c++)
如何使用 Luabridge(1.0.2) 将函数从 LUA 传递到 C++
然后将该回调传递给 c++:
“点击”是 const std::string&,但是如何将回调定义为函数?我尝试了一些方法(void*,std::function),但这些方法都不能正常工作。
c++ - Luabridge:返回 C++ 生命周期托管对象
此剪辑适用于基本类型:
在 lua 中它看起来像这样:
我将如何返回类而不是 ints?
似乎无法正常工作,lua 部分如下所示:
错误是:
c++ - Luabridge:删除时堆损坏(_CrtIsValidHeapPointer)
编辑#3:
我的引擎是按以下方式设置的:
然后我用下面的方式写了几个lua接口:
Engine 中的游戏循环将循环通过 DisplayObject 并执行各种任务。当 LUA 调用 RemoveDisplayObject() 时,会发生 _CrtIsValidHeapPointer。
我们正在删除 LUA 对象之外的项目,这会导致问题吗?
什么会导致堆错误?我应该以不同的方式处理这个问题吗?
这是引擎中的逻辑:
游戏(单人)
包含DisplayObjects
( 的向量DisplayObject
)
Lua 绑定类:
调用Game::Singleton
CreateDisplayObject
,获取指向最后一个对象的指针DisplayObjects
具有从<----调用和传递指针的Remove()
函数这会导致堆损坏(调用 vector.clear() 时)。因此从向量中删除项目会导致堆错误。Game::Singleton
RemoveDisplayObject
CreateDisplayObject
有一些额外的功能,可以DisplayObject
像移动它一样工作,没有堆损坏。
卢阿:
另一个包装 Lua 绑定类的类
包含Remove()
调用Lua 绑定类 Remove()的函数
在某一时刻,引擎将加载一个额外的 lua 文件,该文件在 lua 类上调用 Remove()。
c++ - Luabridge 对 LuaRef 数据的弱引用
考虑以下示例:
在 luabridge 中,我存储了function()
as LuaRef
,它延长了 the 的生命周期,Container
它不会被 GCed,因为它是RefCountedObjectPtr
这是我用来使用弱表的解决方法,但它看起来很难看:
有什么办法可以实现LuaRef
类似的功能吗?或者也许还有另一种解决方法?
c++ - 无法修改传递给 lua 的对象
考虑以下使用LuaBridge将对象传递给 lua 脚本的示例:
显然传递的变量不能被lua修改:
上面的代码打印10
。
同样在处理脚本后的 C++ 中,变量仍然保持其初始值。
但是,可以修改不是对象成员的简单标量数据类型(如浮点数) 。我错过了什么吗?
编辑:Test t1(10);
如果我替换为Test *t1 = new Test(10);
或什Test t(10);
Test *t1 = &t;
至并且仍然传递&t1
给 addVariable
,它显然是可修改的。我不太了解这种行为,有人可以解释一下吗?(地址的地址?)
c++ - LuaBridge 和继承
我正在尝试使用 LuaBridge 通过基类指针将对象从 C++ 传递到 Lua。派生类和基类都已正确注册到 LuaBridge。
在 C++ 方面:
在 Lua 方面:
我如何在 Lua 中从FooBase*
to 'cast-down'?Foo*
Lua/LuaBridge 甚至支持这个吗?