使用 LuaBridge 从 LuaRef 读取参数列表

Posted

技术标签:

【中文标题】使用 LuaBridge 从 LuaRef 读取参数列表【英文标题】:Read a list of parameters from a LuaRef using LuaBridge 【发布时间】:2021-07-21 19:57:07 【问题描述】:

[已解决]

我正在构建一个使用 LuaBridge 的游戏引擎来读取实体的组件。在我的引擎中,一个实体文件如下所示,其中“组件”是我的实体拥有的组件列表,其余参数用于设置每个单独组件的值:

-- myEntity.lua

Components = "MeshRenderer", "Transform", "Rigidbody"

MeshRenderer = 
    Type = "Sphere",
    Position = 0,300,0


Transform = 
    Position = 0,150,0,
    Scale = 1,1,1,
    Rotation = 0,0,0


Rigidbody = 
    Type = "Sphere",
    Mass = 1

我目前正在使用这个函数(在 C++ 中)来从 LuaRef 中的参数(给定它的名称)读取值。

template<class T>
T readParameter(LuaRef& table, const std::string& parameterName)

    try 
        return table.rawget(parameterName).cast<T>();
    
    catch (std::exception e) 
        // std::cout ...
        return NULL;
    

例如,当调用 readVariable<:string>(myRigidbodyTable, "Type") 时,myRigidbodyTable 是一个带有 Rigidbody 值的 LuaRef,这个函数应该返回一个值为“Sphere”的std::string

我的问题是,当我完成读取和存储我的 Transform 组件的值时,当我想读取“Ridigbody”的值并且我的引擎读取值“Type”时,未处理Stack::push(lua_State* L, const std::string& str, std::error_code&) 抛出异常。

我很确定这与我的组件 Transform 存储“位置”等参数的值列表这一事实有关,因为我在读取每个参数只有一个值的组件时没有遇到任何问题.这样做的正确方法是什么,以防我做错了什么?

我还想指出,我是 LuaBridge 的新手,所以这可能是一个我一直无法找到的解决方案的初学者问题。任何帮助表示赞赏:)

【问题讨论】:

【参考方案1】:

发现问题,我没有正确阅读表格。而不是

LuaRef myTable = getGlobal(state, tableName.c_str());

我用的是下面的

LuaRef myTable = getGlobal(state, tableName.c_str()).getMetatable();

【讨论】:

以上是关于使用 LuaBridge 从 LuaRef 读取参数列表的主要内容,如果未能解决你的问题,请参考以下文章

LuaBridge相关

lua开发

使用 Java 从 .raw 卷文件中读取和索引数据

【python3-2】读取html报告返回值,作为接口传参调用

Jmeter从文件中读取参数值

如何在 shell 脚本中只读取一个字符