Lua:我的游戏实体系统绑定出了问题

我正在制作的游戏目前具有简单的实体系统。我有CEntity类(不使用继承,基于组件)和实体管理器。

CEntity与Lua绑定了元表,当你在Lua中创建一个新实体时,就会在分配的userdata中创建一个新实体。

所以这一切都很好,但是我遇到了一个巨大的问题:

  • 如何实现类似于ents.GetByID()的东西?

ents.GetByID()应该返回ID为x的实体的引用。我目前怎么做:创建一个新的userdata,填充memcpy()的现有实体x。

然而,这显然行不通:首先,它会搞乱实体管理器,其次:如果我更改“引用”实体,则实际实体保持不变-我实际上有两个单独的实体。

  • 如何将对现有userdatum的引用推入堆栈中?

原文链接 https://stackoverflow.com/questions/4417243

点赞
stackoverflow用户298661
stackoverflow用户298661

基本上,您需要做的是将Lua注册表中的特定键(例如ID)绑定到userdata上。此外,memcpy = bad,mmkay?

如果您编写了一个简单的C函数来返回Lua注册表,则在Lua侧编写此代码会非常简单,如下所示:

make_entity = function(ID, ...)
    local entity = CreateEntity(...);
    get_registry().EntityIDMap[ID] = entity;
    return entity;
end

get_entity = function(ID)
    return get_registry().EntityIDMap[ID];
end
2010-12-11 15:48:12