下决心
我正在构建一个使用LuaBridge来读取实体组件的游戏引擎。在我的引擎中,实体文件如下所示,其中" components“是我的实体拥有的组件的列表,其余的参数用于为每个单独的组件设置值:
-- 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( myRigidbodyTable,"Type")时,如果myRigidbodyTable是一个具有刚体值的LuaRef,则该函数应该返回一个带有"Sphere“值的std::string。
我的问题是,当我完成读取和存储转换组件的值时,当我想读取"Ridigbody“的值时,当我的引擎读取值"Type”时,就会在Stack::push(lua_State* L,const::string& str,std::error_code&)引发一个未处理的异常。
我很确定这与我的组件转换存储参数列表有关,比如“位置”,因为在读取每个参数只有一个值的组件时,我没有遇到任何问题。如果我做错了什么正确的方法是什么?
我还想指出,我是LuaBridge新手,所以这可能是一个初学者的问题,我一直找不到解决方案。如有任何帮助,我们将不胜感激:)
发布于 2021-04-28 21:04:09
发现问题时,我没有正确地看桌子。而不是
LuaRef myTable = getGlobal(state, tableName.c_str());我使用了以下方法
LuaRef myTable = getGlobal(state, tableName.c_str()).getMetatable();https://stackoverflow.com/questions/67300592
复制相似问题