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

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

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

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


person Jeff    schedule 15.07.2010    source источник
comment
К сожалению, мы не можем перейти на сайты stackexchange. Но если у вас есть к ним доступ (геймдев находится в стадии бета-тестирования?), вы можете просто задать вопрос там.   -  person    schedule 23.07.2010


Ответы (7)


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

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

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

person Patrick Klug    schedule 23.08.2010
comment
Я считаю эту версию C# лучшим ресурсом. В учебнике более подробно рассказывается о проецировании многоугольника на ось, что я нахожу N tut пропускает. Если у кого-то есть путаница с N tut, посмотрите этот С#. - person Jeff; 29.12.2011

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

https://rads.stackoverflow.com/amzn/click/com/159059472X

person eruciform    schedule 15.07.2010

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

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

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

Что можно сказать о фрикционных эффектах? Затем вам понадобятся коэффициенты трения или, возможно, скоростные модели сопротивления воздуха.

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

person John    schedule 18.08.2010
comment
Я буквально просто хочу получить базовый ответ. Подойдет какой-нибудь туториал, который реализует что-то вроде Mario 3, например (хотя в New Mario есть довольно забавная физика...). Я хочу знать, что они делают, чтобы реагировать на столкновения. Создают ли они минимальный вектор коррекции и удаляются? Они используют маленькие пружины? Но самое главное, я ищу, КАК они это реализовали. Учебник N, который я опубликовал, довольно близок к тому, что я ищу, но я бы предпочел что-то более подробное. - person Jeff; 19.08.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, )\
person Calvin1602    schedule 24.08.2010

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

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

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

person grunge fightr    schedule 17.05.2013

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

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

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

person deft_code    schedule 16.07.2010
comment
Меня меньше интересует реалистичная физика, а больше интересует, как вы справляетесь с фактическим столкновением (например, как N использует проекцию). Думаю, я ищу голые основы, ничего сложного. Я смотрел на Box2D и слышал о Farseer, и они выглядят довольно хорошо, и я определенно прибегнул бы к тому или другому, если бы решил сделать игру, основанную на физике. Box2d также работает на Flash. - person Jeff; 17.07.2010