【问题标题】:Lua: Problems with binding my games entity systemLua:绑定我的游戏实体系统的问题
【发布时间】:2010-12-11 14:43:53
【问题描述】:

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

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

这样就好了,但是我遇到了一个大问题:

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

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

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

  • 如何将对现有用户数据的引用推送到堆栈上?

【问题讨论】:

  • OP 请求删除问题,并清除内容。 @Cats:为什么?

标签: c++ lua


【解决方案1】:

基本上,您要做的就是将 Lua 注册表中的特定键(例如 ID)绑定到用户数据。另外,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

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多