我不認爲這是關於課堂設計。你的課程很好,這是需要工作的算法。
他們需要更新很多,銷燬/創建了很多,通常需要更新。
不要摧毀每一個子彈,可以考慮把它放入死亡子彈列表中。然後,當你需要創建一個新的對象時,而不是分配一個新的對象,從死亡列表中拉出一個並重新初始化它。這在保存內存管理調用時通常會更快。
至於更新,你需要更新一切變化 - 真的沒有辦法。
每一幀所有活動的投射物都會被檢查是否與其他物體發生碰撞。
首先 - 如果你檢查每一個對象,然後每對對象進行兩次比較。只需比較更新列表中稍後顯示的對象,即可獲得一半的檢查數量。
#Bad
for obj1 in all_objects:
for obj2 in all_objects:
if obj1 hit obj2:
resolve_collision
#Good
for obj1 in all_objects:
for obj2 in all_objects_after_obj1:
if obj1 hit obj2:
resolve_collision
如何實現「all_objects_after_obj1」是特定的語言,但如果你有一個數組或其他隨機存取結構牽着你的對象,你可以從1開始索引OBJ1後。
其次,命中檢查本身可能會很慢。當一個簡單的選項可以做時,確保你沒有執行復雜的數學來檢查碰撞。如果世界很大,一個空間數據庫方案可以提供幫助,例如。一個網格圖或四叉樹,以減少對象的數量來檢查潛在的碰撞。但在小型遊戲中,這往往是尷尬的,而且很少有收穫。
這兩個步驟似乎都可以肯定需要改進。
他們只'看起來'?剖析應用程序並查看緩慢部分的位置。猜測性能幾乎不是一個好主意,因爲現代語言和硬件可能令人驚訝。
一次只有1個彈丸嗎? – Orbit 2011-03-04 18:08:29