草庐IT

c++ - Lua:从 c 导出类时的方法和属性

我使用lua作为我的3d引擎的脚本语言。我有几个对象的lua“类”,现在我想使用属性而不是getter和setter。所以不是这样的localoldState=ui:GetChild("Panel1"):GetVisible()ui:GetChild("Panel1"):SetVisible(notoldState)我只是ui.Panel1.visible=notui.Panel1.visible问题是我用于创建元表和实例的C++代码覆盖了__index方法。顺便说一句:创建元表:voidCLUAScript::RegisterClass(constluaL_Regfuncs[],st

c++ - 从 C++ 调用 Lua 5.2 函数

我是Lua的新手。我一直在查看一些关于如何从C++调用Lua函数的示例代码,但示例代码使用5.1,我正试图让它与5.2一起工作。以下是有问题的示例代码以及我的评论:lua_State*luaState=luaL_newstate();luaopen_io(luaState);luaL_loadfile(luaState,"myLuaScript.lua");lua_pcall(luaState,0,LUA_MULTRET,0);//thecodebelowneedstoberewrittenisupposelua_pushstring(luaState,"myLuaFunction")

c++ - 如何将表从 Lua 传递到 C++?

我如何将未知长度的表从Lua传递到绑定(bind)的C++函数中?我希望能够像这样调用Lua函数:call_C_Func({1,1,2,3,5,8,13,21})然后将表格内容复制到数组中(最好是STLvector)? 最佳答案 如果您使用LuaBind就像一个挂号电话一样简单。至于自己卷起来,需要看看lua_next功能。基本上代码如下:lua_pushnil(state);//firstkeyindex=lua_gettop(state);while(lua_next(state,index)){//traversekeysso

c++ - 带有 C++ 的 Lua 脚本 : attempt to index global 'io' (a nil value)

我打算使用luafoAI编写一个程序,所以我试图让它一起工作。但是当我尝试从我的cpp文件加载lua脚本时,我收到了这个错误消息:--toto.lua:1:attempttoindexglobal'io'(anilvalue)这是我的lua脚本:io.write("运行中",_VERSION,"\n")这是我的cpp文件:voidreport_errors(lua_State*L,intstatus){if(status!=0){std::cerr非常感谢。 最佳答案 你不应该直接调用luaopen_*函数。使用luaL_openl

c++ - 从 C++ 调用 Lua 函数

我在谷歌上搜索了高低并找到了示例,但它们似乎都不起作用(Lua5.2)。我在Lua中有一个简单的函数functiononData(data)print(data)end我想从C++调用onData并试过这个://CreatenewLuastateL=luaL_newstate();//LoadallLualibrariesluaL_openlibs(L);//Createco-routineCO=lua_newthread(L);//LoadandcompilescriptAnsiStringscript(Frame->Script_Edit->Text);if(luaL_loadbu

c++ - 具有反向和 pop/push_back 成本的 STL vector

我不太擅长计算算法成本,所以我想问一下。这是一个初始化为1000个元素的vector:vectormFreeIndexes(1000);我会连续pop_back/push_back元素到vector,但push_back永远不会超过1000(所以永远不要强制vector重新分配)。在这种情况下,pop_back/push_back操作是O(1)还是O(n)? 最佳答案 来自C++标准23.3.7.5:voidpush_back(constT&x);voidpush_back(T&&x);Remarks:Causesreallocat

c++ - Lua、C++ 和消失的元表

背景我在游戏中与Watusimoto合作Bitfighter.我们使用LuaWrapper的变体将我们的c++对象与游戏中的Lua对象连接起来。我们还使用了一个名为lua-vec的Lua变体。加速vector运算。一段时间以来,我们一直致力于解决一个未能解决的错误。将发生随机崩溃,表明元表已损坏。参见here对于Watusimoto关于此问题的帖子。我不确定这是因为损坏的元表,并且看到了一些我想在这里询问的非常奇怪的行为。问题表现例如,我们创建一个对象并将其添加到如下级别:t=TextItem.new()t:setText("hello")levelgen:addItem(t)但是,游

c++ - Lua C API - 从堆栈上的表中获取元表

假设我们有一个传递给函数的表,它现在位于堆栈顶部,如下所示://-1=table是否可以从堆栈中的那个表中获取元表?我可以像这样简单地使用已知名称的标识符来获取它:luaL_getmetatable(L,"Foo");但我想重新使用该函数并从堆栈中的表中获取元表。可能有一种简单的方法可以做到这一点,但我似乎找不到相关的函数。 最佳答案 使用lua_getmetatable而不是luaL_getmetatable。lua_版本等同于Lua中的getmetatable(),即它从堆栈上的值获取元表。luaL_版本用于查找(按名称)先前使

c++ - 安全的 Lua 调用 C++ 注册函数

大家好!我有一个C++应用程序将Lua作为脚本嵌入。非程序员编辑Lua脚本,然后C++应用程序调用Lua脚本,Lua脚本也调用C++注册函数。我使用Luaplus来完成上述工作。我的问题是:当脚本编辑器出现错误(例如参数拼写错误)时,C++应用程序会崩溃!我能做些什么来防止这种情况发生?谢谢 最佳答案 查看lua_cpcall和lua_pcall。它们都允许在c中对lua进行protected函数调用。如果它们返回一个非负数,则调用失败并且lua堆栈仅包含错误字符串。在cpcalls的情况下,堆栈未被修改。对于pcall,您需要查看

c++ - 将 Lua 绑定(bind)胶水代​​码与我的游戏引擎的其余部分隔离开来

我想为我的游戏引擎添加对Lua脚本的全面支持。我为自己设定的最大目标之一是保持完全模块化。这意味着,除了Lua绑定(bind)部分之外,我不希望引擎的其余部分使用任何特定于Lua的功能。到目前为止,这已被证明并不困难。纯C++到Lua的功能绑定(bind)部分-例如绑定(bind)Vector、Color和Entity对象,以及Draw库或Physics库等模块很容易与引擎的其余部分隔离。现在,我的问题在于事件。我需要为脚本编写者提供一种响应游戏事件的方法。这涉及从引擎调用Lua函数。示例:在Lua中的C++实体上调用OnCreate、OnUpdate、OnCollide。这些事件发生