2012-03-29 76 views
4

我正在嘗試製作塔防遊戲,我正在實施快速查找實體的遊戲地圖。我使用std :: list(用於快速push_back實體指針,並且不會從列表的任何一點刪除錯誤)工作,但是我發現遍歷1500個元素的列表超長。我甚至不能在我的比賽中達到10次FPS。我會告訴什麼MSVS顯示探查:通過快速迭代從任何地方刪除容器

Profiler hot call stack

後getEntitiesInRadius通話接下來就是=運算符是用列表的末尾比較。接下來是==操作符調用。它在調試模式下運行。但我認爲,即使對於迭代1500個元素的調試時間太長。也許我錯了這個斷言?

+0

迭代列表很慢。嘗試改變爲std :: vector。刪除速度較慢,但​​push_back快(分期付款),迭代速度快。 – 2012-03-29 09:20:51

+1

我認爲Debug模式下的測試性能沒有意義 – psur 2012-03-29 09:21:59

+0

用於編寫塔防遊戲+1。我愛他們,他們不夠。 :-) – 2012-03-29 09:23:53

回答

0

我假設你的地圖在遊戲中的大小是固定的?如果你想'最快',std::list並不是一個好的選擇,我會從vector開始,只有這樣做還不夠,我纔會看其他解決方案。

你說你使用'快速push_back'列表,但除非一個矢量被調整大小(這可以通過使用reserve,當然在固定大小的實體上(如遊戲地圖)來避免),push_back對一個矢量會快很多。 刪除可能會更慢(但沒有給出)。

最重要的是,在調試版本上進行性能測試根本沒有意義,首先確保在嘗試解決問題之前有問題!

+0

我建立它在釋放模式/ O2性能1500實體是好的。只有約4-5%的CPU使用率。感謝您的快速解答! – 2012-03-29 09:32:06