2013-02-24 41 views
1

我有一個自定義用戶界面小工具庫,爲我正在製作的遊戲創建。我需要考慮繪製順序和復古適合我目前有什麼,並不確定最好的方式來做到這一點。我有一個UI類,它從xml文件加載小部件。它將所有小部件存儲在映射中,其中鍵是小部件的字符串名稱。UI小工具按順序繪製

小部件可以在父子關係中保存其他小部件(所以Widget類具有小部件的映射,其中名稱是關鍵字)。當我通過UI小部件地圖繪製I循環時,只調用沒有父級(最頂層)的Widget的Draw()函數。在每個Widget的Draw()中,它循環遍歷它的子節點並調用它們的Draw()函數。

問題是什麼將是一個很好的方法來爲每個小部件的排序順序變量工作,同時保持地圖的排序順序變量的順序繪圖,因爲我喜歡通過字符串鍵輕鬆地查找小部件名稱?

任何想法?

+1

一個'map'可以方便地通過名稱訪問小部件,還有一個用於繪圖的排序'vector'(或'list')? – 2013-02-24 11:49:41

+0

這很常見嗎?它們都不被認爲是浪費空間來存儲它們?我知道他們是指針,但它仍然佔用存儲空間的權利? – user441521 2013-02-24 11:51:43

+0

我沒有親身經歷,但這就是我會做的。除非你擁有數百萬的小部件,否則這不會成爲問題。 – 2013-02-24 12:25:13

回答

1

當你需要多種方式訂購的同一組項目中,你有兩個選擇:

  • 同時存儲排序,或
  • 存儲一個排序,並找出在飛行
  • 另一個

存儲第二組排序是一種使用內存進行支付以節省CPU週期的方法。

在你的情況下,你有兩個順序:一個由名稱到widget的地圖實現,另一個爲繪圖順序。您有三種實現方式選擇:

  • 存儲部件的映射(即按名稱排序),並在每次需要弄清楚時間運行拓撲分類繪製順序 - 我想在這裏說,之所以下令繪畫是爲了確保父母在孩子面前被繪製,這意味着拓撲排序。
  • 通過繪圖順序將小部件存儲在列表中,然後運行線性查找以獲取小部件的名稱 - 當您繪製小部件很多時,這可能是一個不錯的選擇,但很少按名稱查找。
  • 在地圖中存儲小部件(按名稱排序),並根據繪製順序排列小部件或小部件名稱的單獨列表 - 此雙重記帳花費內存來購回您的CPU週期否則將浪費在繪圖順序中重新排序。