Хорошие 2D Ответы Столкновения Ответы - PullRequest
16 голосов
/ 15 июля 2010

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

Так может кто-нибудь предложить несколько хороших статей / книг по ответам на столкновение в 2D?

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

Ответы [ 7 ]

15 голосов
/ 23 августа 2010

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

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

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

3 голосов
/ 15 июля 2010

Мне очень нравится этот, он только что прибыл неделю назад, и это все, что вы могли бы хотеть, кроме релятивистских эффектов:

http://www.amazon.com/Physics-Game-Programmers-Grant-Palmer/dp/159059472X

1 голос
/ 24 августа 2010

Если вы хотите получить базовый ответ для ответа о столкновении, вот он:

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, )\
1 голос
/ 18 августа 2010

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

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

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

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

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

0 голосов
/ 17 мая 2013

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

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

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

0 голосов
/ 16 июля 2010

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

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

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

...