Как это отскакивает от объекта после кода обнаружения столкновений? - PullRequest
2 голосов
/ 02 июня 2011

Недавно я просто читал книгу XNA 4.0 Game Developmeny by Example. В одной из глав этот код написан для отражения (отражения) объектов после обнаружения столкновения:

private void BounceAsteroids(Sprite asteroid1, Sprite asteroid2)
{

    Vector2 cOfMass = (asteroid1.Velocity + asteroid2.Velocity) / 2;
    Vector2 normal1 = asteroid2.Center - asteroid1.Center;
    normal1.Normalize();
    Vector2 normal2 = asteroid1.Center - asteroid2.Center;
    normal2.Normalize();

    asteroid1.Velocity -= cOfMass;
    asteroid1.Velocity = Vector2.Reflect(asteroid1.Velocity, normal1);
    asteroid1.Velocity += cOfMass;

    asteroid2.Velocity -= cOfMass;
    asteroid2.Velocity = Vector2.Reflect(asteroid2.Velocity, normal2);
    asteroid2.Velocity += cOfMass;
}

Может кто-нибудь объяснить мне этот код с помощью некоторой диаграммы или примера, который легко визуализировать. Я не могу визуализировать этот код. Если кто-нибудь знает какую-нибудь книгу, где я могу изучить этот тип физики, полезный для программирования игр, то я также буду очень благодарен.

1 Ответ

2 голосов
/ 02 июня 2011

это пытается симулировать отскок.

Нормализация и вычисления центра заставляют сгустки начинать отскок, когда их края касаются, а не когда их центры могут ударить.

затемскорость изменяется в соответствии с некоторыми расчетами, включающими массы каждого астероида.

функция Отражение, без сомнения, рассчитывает некоторые углы, поэтому все идет в правильном направлении.

...