Я работал над простым космическим шутером и дошел до того момента в проекте, когда мой ужасно написанный код действительно замедляет работу. После запуска 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) для пространственного разделения быстро движущихся объектов?