我正在研究我的遊戲引擎的一小部分,並想知道如何優化某些部分。這種情況下的雙向數據結構
的情況相當簡單,它是:
- 我有地圖
Tile
S(存儲在一個兩維數組)(〜26萬瓦,但承擔更多) - 我有
Item
秒的列表,它始終是至少在大多數瓷磚 - 一個
Tile
在邏輯上包含的Item
小號 - 無限量在遊戲執行許多
Item
s爲連續LY創建,他們從自身做起Tile
- 每
Item
連續地改變Tile
到一個鄰居(上,右,下,左)
截至目前每Item
有其實際Tile
參考,我只是保留一個項目清單。 每次Item
移動到相鄰的瓷磚時,我只需更新item->tile = ..
,我很好。這工作正常,但它是單向的。
在擴展引擎的同時,我意識到我必須多次查找瓦片中包含的所有項目,並且這會有效地降低性能(特別是在某些情況下,我必須查找一系列瓦片的所有項目,逐個)。
這意味着我想找到適合自己的查找特定Tile
的所有項目比爲O(n)更好的數據結構,但我想,以避免從一個平鋪「移動到多少開銷另一個「階段(現在只是分配一個指針,我想避免在那裏做很多操作,因爲它非常頻繁)。
我在考慮一個自定義數據結構,以利用項目總是移動到鄰居單元但我目前在黑暗中摸索的事實!任何建議,將不勝感激,即使棘手或神祕的方法。不幸的是,我不能浪費記憶,所以需要一個很好的折衷。
我正在用STL開發它,但沒有提升。 (是的,我知道關於multimap
,它不滿足我,但我會嘗試,如果我沒有找到更好的東西)
'瓷磚'地圖已經是一個原始的二維指針,例如。 '瓷磚地圖[WIDTH] [HEIGHT]'因此我可以隨機訪問整個地圖,但我不希望每個瓷磚都有一個項目列表,因爲這些項目很稀疏並且不佔用大的區域地圖本身.. – Jack 2012-04-16 14:36:30
這聽起來像不好的設計。首先刪除固定大小的數組,然後使用一個具有適當接口的向量,然後通過給它賦予vector或任何其他地方使'Tile'擁有它的項目。 – 111111 2012-04-16 14:39:07
這不是一個糟糕的設計,整個世界都需要這張地圖。每塊瓷磚都必須存在,不是因爲物品,而是因爲許多其他的東西。正如我所說這只是引擎的一小部分:) – Jack 2012-04-16 14:58:43