游戏引擎中的对象层次实现

时间:2016-12-04 10:53:59

标签: c++ tree

我正在开发一个爱好游戏引擎,我目前有这些类:(简化)

class Scene {
    GameObject* m_root;
    GameObject*[] m_gameObjects[];
}

class GameObject {
    GameObject* m_parent;
    GameObject*[] m_children;
}

当前实施:

  • 当我向场景中添加游戏对象时,我还将其添加为m_root的子项,并将其添加到场景的游戏对象数组中。

第一个问题:

  • 正如我所说,目前我还将游戏对象的指针存储在数组中,以便我可以轻松地遍历它们。
  • 我是否应该维护这个数组,还是应该在一段时间内从根目录中查看树?

  • 哪一种更适合标准使用? (比如调用所有对象的更新,搜索对象等)

第二个问题:

  • 我应该如何从特定游戏对象访问root?

  • 构建根目录时,我应该将根作为静态字段存储在GameObject类中吗?

  • 或者我应该通过父母直到找到一个没有父母的对象?

通过父母的意思是我的意思:

GameObject* root = this;
while(root->GetParent() != null) {
     root = root->GetParent();
}
return root;

我觉得在这两种情况下“穿越树”方法都更好。

1 个答案:

答案 0 :(得分:2)

第一个问题 如果数组的唯一用法是遍历对象,那么我说它是多余的。如果数组的索引具有某种意义,并且它允许您更快地访问特定对象,那么可能会有一些好处。

第二个问题 我完全避开了可变类静态变量。它们基本上等同于全局变量。