2016-12-04 89 views
1

我工作的一個愛好遊戲引擎,和我有現在這些類:(簡體)對象層次實現

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

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

當前實現:

  • 當我添加遊戲對象添加到場景中,我還將其添加爲m_root的子元素,並將其添加到場景的遊戲對象數組中。

第一個問題:

  • 正如我所說的,目前我也是遊戲對象的指針存儲在數組中,所以我可以通過他們輕鬆地重複。
  • 我是否應該維護這個數組呢?還是應該在一個while循環中從根節點通過樹?

  • 哪一個更適合標準使用? (就像調用所有對象的更新,搜索對象等)

第二個問題:

  • 我應該如何從一個特定的遊戲對象訪問根?

  • 當我構建根時應該將根存儲爲GameObject類中的靜態字段嗎?

  • 或者我應該只是通過父母,直到我找到一個沒有父母的對象?

我的意思是通過家長會什麼:

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

我感覺到,「經歷樹」的方法是在這兩種情況下更好。

回答

2

第一個問題 如果數組的唯一用途是通過迭代的對象,那麼我會說這是多餘的。如果數組的索引有一些含義,並且允許您更快地訪問特定對象,那麼可能會有一些好處。

第二個問題 我會完全清除可變類靜態變量。它們基本上相當於全局變量。