【发布时间】:2021-12-27 06:33:31
【问题描述】:
我需要帮助将用 C++ 创建的游戏对象推送到我们的 Lua 环境中。这是一个看起来像我们在 C++ 中创建以下游戏对象的示例
class Player
{
public:
Player(std::string pName, int ObjID)
{
this -> name = pName;
this -> objectId = ObjID
}
std::string name;
int objectId;
};
现在我们的对象都是用 C++ 创建的,我们不想在 Lua 脚本中为它创建构造函数。我对使用 sol 或 LuaBridge 持开放态度,我研究了他们的示例,他们展示了如何使用构造函数和推送函数推送类,但是是否可以使用属性而不是函数推送用户数据?这样在我们的 lua 脚本中,我们可以做 obj.name 而不是 obj:GetName()
更多关于我们如何创建 obj 的细节并希望将其推送:
Player* player1 = new Player("Player1", 1)
Player* player2 = new Player("Player2", 2)
那么希望我们能以某种方式将这些推送到环境中,谢谢您的帮助!
我对 luabridge 的尝试:
luabridge::getGlobalNamespace(this->lua_state)
.beginClass<GameObject>("GameObject")
.addProperty("Name", &GameObject::Name)
.endClass();
但据我所知,如果我想通过 Lua 创建新类,而不是推送已经创建的类。用 sol 也试过类似的东西。
【问题讨论】:
-
您想分享任何自己的想法、尝试和研究吗?
-
is it possible to push userdata with properties instead of functions?- 是的。当你写obj.name时,Lua实际上调用了getmetatable(obj).__index(obj, "name"),其中__index是你写的C函数。 -
@Piglet,感谢您的回复。我用我尝试使用 luabridge 的方法更新了主要问题,也尝试了与 sol 类似的方法。但我认为这是为了在 Lua 中创建新类,而不是从 C++ 传递类。
-
@EgorSkriptunoff,感谢您的回复,所以您的意思是我必须为我的 C++ 游戏对象编写一个小 Lua 包装器,作为 obj 的 __index?