2
我一直在研究一個簡單的太空射擊遊戲,並且已經到了項目中我寫得很糟糕的代碼實際上正在放慢速度。在運行EQATEC之後,我可以看到大部分問題都在檢查碰撞檢測中的一切。我正在考慮投入QuadTree,但大多數碰撞都在小行星上,這些小行星的確有很多變化(需要大量更新)。我的下一個選擇是微觀優化碰撞檢查本身。這是它:C#/ XNA - 邊界圓碰撞(微)優化?
public bool IsCircleColliding(GameObject obj) //simple bounding circle collision detection check
{
float distance = Vector2.Distance(this.WorldCenter, obj.WorldCenter);
int totalradii = CollisionRadius + obj.CollisionRadius;
if (distance < totalradii)
return true;
return false;
}
我聽說Vector2.Distance涉及昂貴的Sqrt,所以有什麼辦法可以避免這種情況嗎?或者有沒有辦法通過一些奇特的計算來近似距離?任何更快的速度,本質上。
此外,與實際問題略有無關,是否有一種很好的方法(QuadTrees除外)用於快速移動對象的空間分區?
好吧,用DistanceSquared替換Vector2.Distance,並將每個半徑乘以它自己,現在碰撞半徑似乎被擊暈了;一切似乎都陷入彼此之中。我會用斷點玩一下。 :P – Lexusjjss 2013-05-13 22:49:46
你必須平方totalradii,而不是每個半徑單獨。 – redtuna 2013-05-13 22:54:02
Aaa現在可以工作。那麼,這讓我感覺像一個愚蠢的人。謝謝。 – Lexusjjss 2013-05-13 22:55:29