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

时间:2010-12-11 14:43:53

标签: c++ lua

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

CEntity使用metatable绑定到Lua,当您从Lua中创建新实体时,将在分配的用户数据中使用C ++创建新实体。

所以这样就好了但是我遇到了一个很大的问题:

  • 如何实现类似ents.GetByID()?
  • 的内容

ents.GetByID()应该返回对ID为x的实体的引用。我目前的工作:创建一个新的用户数据,填充现有实体x的memcpy()。

然而,这显然不起作用:首先,它弄乱了实体管理器,第二:如果我更改“引用”实体,实际实体保持不变 - 实际上我有两个独立的实体。

  • 如何将引用推送到堆栈上的现有userdatum?

1 个答案:

答案 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