Эй, я в настоящее время ищу различные методы реализации ответа коллизии в 2D видеоиграх, что-то подобное этой учебной Метасети имеет: N Учебное руководство я надеюсь реализовывать что-то в XNA, но любой язык был бы прекрасен. Я больше интересуюсь реализацией программно, чем фактическая теория. Я предпочел бы больше новичка дружественный материал, но я действительно приветствую больше тем усовершенствования.
Таким образом, кто-то мог предложить некоторые хорошие 2D статьи/книги ответа коллизии?
(PS: мне больше интересно в ответ, чем обнаружение),
Учебное пособие N , которое вы уже упомянули, является отличным ресурсом для начала. Я также рекомендую очень хорошую статью Обнаружение столкновений 2D-полигонов . Он поставляется с отличной реализацией C # и примером для обнаружения столкновений многоугольников с использованием теоремы о разделении оси и лучше объясняет некоторые концепции.
Что касается реакции на столкновение, это зависит от сценария. Для игр вы можете проверить возможное столкновение на основе текущей скорости , а затем просто отрегулировать фактическую скорость, чтобы предотвратить столкновение. Вы также можете реализовать своего рода эффект «отскока». В любом случае он, скорее всего, будет регулировать как скорость, так и направление объекта.
Вы можете использовать теорему о разделении осей для обнаружения столкновений, а также использовать многоугольную проекцию для определения расстояния до цели на определенной оси. (большую часть времени вектор, по которому вы двигаетесь).
Мне очень нравится этот, он появился только неделю назад, и это все, что вы могли бы захотеть, кроме релятивистских эффектов:
http://www.amazon.com/Physics-Game-Programmers-Grant-Palmer/dp/159059472X
Физические движки очень сложны. Вам будет гораздо лучше использовать существующий.
Если вы хотите использовать физику в своей игре, используйте Farseer, или привязку Box2D. Если вы хотите изучить физику, подумайте о создании C#-порта Box2D или Chipmunk. Если вам просто интересно, весь их код с открытым исходным кодом.
Сколько деталей вам нужно? Ответы на некоторые из этих вопросов помогут вам избавиться от пакетов, которые не делают то, что вам нужно.
Вам нужно беспокоиться о вращении объекта? Затем вам нужно позаботиться о плечах рычага, угловом моменте, моментах инерции и крутящих моментах.
Вам нужно беспокоиться о деформации? Затем вам нужно заняться анализом конечных элементов, напряжением / деформацией и т. Д. - чем-то, что описывает, как объекты внутренне реагируют на внешние силы.
А как насчет фрикционных эффектов? Затем вам понадобятся коэффициенты трения или, возможно, скоростные модели сопротивления воздуха.
Гравитационные эффекты? Электромагнитные эффекты? Другие силы?
Если вам нужен базовый ответ для ответа на столкновение, вот он:
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, )\