我搜索碰撞檢測主題,但他們都是關於檢測本身。我的問題更多的是在檢測過程之前和之後。我正在寫我的第一場大型比賽,我想盡可能提高效率。設置碰撞檢測,然後處理2D遊戲中的碰撞
遊戲的前提是你在遊戲區周圍飛行。在這個領域將會成爲環境,敵艦,以及在太空中漂浮和漂浮的拋射物所提供的不同性質的障礙。如果需要或想要,對象將能夠圍繞其中心旋轉。
我的設置測試的想法是讓對象以某種方式加載到隊列和列表中。然後遊戲將採取隊列前面的任何內容並對列表中的所有內容進行測試。它會首先檢查以確保列表中的東西不是自己的(這會一直產生一切碰撞的聲音)。接下來,遊戲將檢查隊列中的對象與列表中的對象之間是否存在衝突。如果發生碰撞,那麼它會標記對象說他們已經發生碰撞,並保存一個參考或任何物體碰撞的內容。例如,如果A與B碰撞,則遊戲會告訴A運行碰撞函數,B運行碰撞函數,並且將存儲到A中對B的引用,B將存儲對A的引用。
然後,遊戲將繼續檢查隊列中的對象的衝突,直到它遍歷列表爲止,每次執行上述操作以說明多個對象擊中或被多個對象擊中的對象。例如,如果有三個球,A,B和C以及A在同一幀中被B和C兩者擊中,則A的速度將被B修改,然後被C修改,並且B和C的速度將由A修改。
這樣做是否明智?我現在並不擔心實際發現的碰撞事件,還有大量的文章或教程以及我自己的想法來解決這個問題。我沒有遇到任何前後談過的事情。我不確定隊列和列表中有多少東西會開始導致大量負載並降低遊戲速度。現在我的物體都只有x,y位置,x,y速度,他們面對的方向以及其他一些東西。
現在我想我開始漫無邊際的事情了。任何洞察力或智慧將不勝感激。
移動向量是否在您遍歷隊列時更新?看起來B和C的運動向量會被A _after_ A修改後的運動向量發生變化。 – 2012-04-27 16:34:44
它會保存舊值和新值,運行檢測過程,然後所有對象會根據需要進行更新。所以在這個例子中,A會與B進行交互,A會保存新的速度。然後,它會與C進行交互,C會修改並保存更新的速度。然後,一旦遊戲退出檢測,它會運行一個過程來更新對象,使他們使用他們的新速度或做任何事情。 – Azaral 2012-04-27 16:51:25
是的,但是當你計算C的新速度時,C不會使用A的新速度嗎?假設我可以想到最簡單的碰撞響應,其中A具有起始速度(0,1)並且C具有(0,-1),B也具有(0,-1),A與B中的C和C碰撞相同的幀,首先它被B修改,給出A速度(0,-1),然後它與C碰撞,但是因爲它們具有相同的速度矢量,所以它們都不會改變(或者它們都在相同方向上增加速度)。或者你的意思是新的速度存儲在一個新的列表中,並且在所有計算完成後交換這些列表? – 2012-04-27 16:57:30