我目前正在制作的游戏中有一个简单的实体系统。我有CEntity类(不使用继承,基于组件)和实体管理器。
CEntity使用metatable绑定到Lua,当您从Lua中创建新实体时,将在分配的用户数据中使用C ++创建新实体。
所以这样就好了但是我遇到了一个很大的问题:
ents.GetByID()应该返回对ID为x的实体的引用。我目前的工作:创建一个新的用户数据,填充现有实体x的memcpy()。
然而,这显然不起作用:首先,它弄乱了实体管理器,第二:如果我更改“引用”实体,实际实体保持不变 - 实际上我有两个独立的实体。
答案 0 :(得分:0)
基本上,您需要做的是将Lua注册表中的特定密钥(例如,ID)绑定到userdata。另外,memcpy = bad,mmkay?
如果您编写了一个返回Lua注册表的简单C函数,那么在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