C++中的lua表映射到lua文件中。

如何让 C++ 中的 lua 表映射到 lua 脚本,使脚本定义了表的属性和方法,从而使结果 lua 文件看起来像这样:

Script.test = 5

function Script:Update()
end

这样的脚本可以被多次读取,但每次读取都应该在 C++ 中得到自己的独特表。

我的想法是,从 C++ 中我想调用每个独特的 Update() 方法,并能够读取/设置其测试变量。

假设您正在制作一个视频游戏,并告诉您,如果您制作了这样结构化的脚本并将其附加到模型上,游戏将在每个帧运行 Update() 方法,并且您定义的变量仅适用于该脚本/模型。

点赞
用户234175
用户234175

这个回答只是为了详细解释我的上面的评论。实现您所描述的一个简单的方法是在脚本文件中创建本地表并在最后返回该表。

local Script = {}

Script.test = 5
Script.foo = "bar"

function Script:Update()
end

return Script

这是将lua模块放入自己的命名空间并避免全局污染的常用方法。

您可以通过以下方式从堆栈中获取并使用返回的Script表:

// 加载和执行您的脚本 
luaL_dofile(L,"script.lua");

// 运行Script:Update() 
lua_getfield(L, -1, "Update");
lua_pushvalue(L, -2);
lua_call(L, 1, 0);

您可以将上面的代码片段包装成一个函数,以便更容易地调用多次。您甚至可以通过缓存编译的 script.lua 来使其更有效,从而避免每次调用此函数时重新解析和重新创建包装函数。例如:

lua_getfield(L, LUA_REGISTRYINDEX, "cached_script");
if (lua_isnil(L, -1))
{
  luaL_loadfile(L, "script.lua");
  lua_pushvalue(L, -1);
  lua_setfield(L, LUA_REGISTRYINDEX, "cached_script");
}
lua_pcall(L, 0, 0, 0);
// 等等
2013-10-20 05:21:49