私は単純なスペース シューターに取り組んできましたが、プロジェクトの途中で、ひどく書かれたコードが実際に速度を低下させているところまで来ました。EQATEC を実行した後、問題の大部分は、すべての衝突検出に関する厄介なすべてのチェックにあることがわかりました。QuadTree を配置することを検討していましたが、衝突の大部分は小惑星上にあり、頻繁に移動します (多くの更新が必要になります)。私の次の選択肢は、衝突チェック自体をマイクロ最適化することでした。ここにあります:
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 以外) はありますか?