Подтвердить что ты не робот

Хорошие ответы на столкновение с 2D-столкновением

Эй, в настоящее время я ищу различные методы реализации реакции столкновения в 2D-видеоиграх, что-то похожее на этот учебник. Metanet: N Tutorial Я ищу что-то реализовать в XNA, но любой язык будет в порядке. Меня больше интересует реализация программно, чем фактическая теория. Я бы предпочел более удобный для новичков материал, но я приветствую более продвинутые темы.

Значит, кто-то может предложить хорошие статьи/книги для 2D-столкновений?

(PS: меня больше интересует ответ, чем обнаружение)

4b9b3361

Ответ 1

N учебник, о котором вы уже упоминали, является отличным ресурсом для начала. Я также рекомендую очень хорошую статью Двустороннее обнаружение столкновений многоугольников. Он поставляется с отличной реализацией С# и примером для обнаружения столкновений многоугольников с использованием теоремы о разделительной оси и объясняет некоторые концепции лучше.

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

Вы можете использовать теорему о разделительной оси для обнаружения столкновения, а также использовать проекцию многоугольника, чтобы найти расстояние до цели на определенной оси. (большую часть времени вектор, на котором вы двигаетесь).

Ответ 3

Сколько вам нужно? Ответ на некоторые из этих вопросов поможет вам устранить пакеты, которые не делают то, что вам нужно.

Вам нужно беспокоиться о вращении объекта? Тогда вам нужно беспокоиться о рычагах, импульсе angular, моментах инерции и крутящих моментах.

Вам нужно беспокоиться об деформации? Затем вам нужно пройти анализ конечных элементов, напряжение/напряжение и т.д. - что-то, что описывает, как объекты реагируют внутренне на внешние силы.

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

Гравитационные эффекты? Электромагнитные эффекты? Другие силы?

Ответ 4

Если вам нужен базовый ответ для ответа на столкновение, вот он:

for each pair of objects that collide
    ask gently to the collision detection lib their interpenetration distance
    Apply an impulse (i.e. a force in the duration of the frame) to both objects :
        force proportional to penetration depth (you will have to tune the coef by hand)
        direction : perpendicular to the collision normal.
        application point : the collision point (approximately, since it s not a point anymore but a volume)
integrate (Euler, Verlet, )\

Ответ 5

Физические двигатели очень сложны. Вам будет намного лучше использовать существующий.

  • Farseer (С#, полученный из более старой версии Box2D).
  • Box2d (С++, имеет привязки .NET)
  • Chipmunk (C, я не думаю, что у него есть порт С#, но вы можете сделать его).

Если вы хотите использовать физику в своей игре, используйте Farseer или привязки Box2D. Если вы хотите узнать о физике, подумайте о создании порта С# для Box2D или Chipmunk. Если вам просто интересно, весь их код является открытым исходным кодом.

Ответ 6

Я тоже искал ту же информацию, Самый полезный вещь, которую я нашел до сих пор, была

http://www.myphysicslab.com/collision.html

Хуже всего для меня это тахат, это с трением (касательный импульс столкновения только нормальный импульс), и я думаю, что с такой импульс трения был бы лучше, но все же не найдено учебника, как правильно реализовать что