C++映射到 lua 文件的 lua 表
C++ lua table mapped to lua file
如何在C++中创建一个lua表映射到一个lua脚本,其中脚本定义了表的属性和方法,因此生成的lua文件如下所示:
Script.test = 5
function Script:Update()
end
因此,此脚本可以多次读取,但每次它都应该在C++中获得自己唯一的表。
这个想法是,从C++我想调用每个唯一的Update()
方法并能够读取/设置其测试变量。
假设您正在制作一个视频游戏,我告诉您,如果您制作这样的脚本并将它们附加到模型,游戏将每帧运行 Update() 方法,并且您定义的变量是该脚本/模型的本地变量。
这个答案只是为了详细说明我上面的评论。实现您所描述的内容的一个简单想法是直接在脚本文件中创建该本地表,并在最后返回该表。
local Script = {}
Script.test = 5
Script.foo = "bar"
function Script:Update()
end
return Script
这是将 lua 模块放入其自己的命名空间并避免全局范围污染的常用方法。
您可以从堆栈中获取并使用返回的Script
表
// load and execute your script
luaL_dofile(L, "script.lua");
// Run 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);
// etc.
相关文章:
- .cpp和.h文件中的模板专用化声明
- 是否可以使用另一个lua文件中定义的表,该表在当前文件中不需要作为模块
- 如何在SWIG接口文件中检查Lua版本
- C++-在没有自定义.lib文件的情况下从Lua C模块调用Lua函数
- SOL2/C++ - Lua初学者,是否可以在Lua文件之间传递Lua表
- 组合 Lua 二进制文件
- Qt with Lua |放置 lua 文件的位置
- 加载 Lua 文件并使用变量而不执行函数
- 如何使用 sol2 编写包含 lua 表的文件
- 如何使用 C++ 分发 Lua 文件
- 可以在Lua中加载C++dll文件吗
- 如何使用LuaBridge从文件加载表?[Lua来自C++]
- C++ 加密和解密Lua文件
- C++映射到 lua 文件的 lua 表
- 将项目文件夹(lua)嵌入到exe中
- 如何使用 gdb 从核心文件中获取 lua 堆栈跟踪
- 如何从lua文件到c++获取字符串
- 为什么C++看不到我的 lua 脚本文件?
- 如何创建和调用lua函数,即在多个文件中,从c++
- Lua-loadfile()在同一目录中找不到文件