Самыми продвинутыми играми, которые я создал, являются игра с 8 шарами, созданная на физическом движке Box2dFlashAS3, и платформенная игра с уровнями.
Когда я делал игры на платформе, я всегда хотел знать, как создать движок, чтобы я мог его использовать повторно. Когда я вижу игры с наклонами, изогнутыми склонами, идеальной гравитацией и реальной физикой, мне всегда хотелось знать, как кодировать движок.
Пожалуйста, предложите методы и статьи для любой необходимой базы знаний.
Ответы:
В то время как я рекомендую против качения своего физического движка для чего - нибудь другого , чем опыт это делать (просто понять , что вы , вероятно , следуешь выбросить , когда вы сделали - это действительно трудно получить все edgecases и числовой предел / вопросы устойчивости выясняли , и ваше время может быть намного лучше использовано для участия в существующем движке), вот несколько ресурсов:
Уроки в бильярдном зале: быстрое и точное обнаружение столкновений между кругами или сферами обсуждает столкновение окружности / окружности и сферы / сферы.
В N Учебники замечательны для базового понимания Разделительной оси теоремы на основе выявления и реагирование.
источник
У Эрин Катто есть все лекции GDC о внедрении Box2D онлайн. Box2D также имеет простой код для чтения, по моему опыту.
источник
Вот как вы можете это сделать:
Приближенное движение
Каждому физическому объекту нужны эти векторы:
Итак, интуитивно, вы должны делать такие вещи каждый кадр с каждым физическим объектом
a
:Подводные камни : это известно как метод интеграции Эйлера . Это приближение лучше для небольших скоростей и ускорений и с небольшими временными шагами. В игре это обычно так. Но если объект движется очень быстро к тонкой стене или прямо к другому движущемуся объекту, он может пропустить столкновение с этим объектом, когда его положение увеличивается на достаточно большую величину, чтобы полностью пересечь его. Если у вас есть быстро движущиеся объекты, вам может потребоваться постоянное обнаружение столкновений, чтобы избежать этого.
коллизия
Столкновение может быть аппроксимировано такой последовательностью:
Это называется дискретным обнаружением столкновений, как это происходит в отдельные моменты времени. Каждый шаг заслуживает внимания:
Шаг 1: обнаружение столкновений (вещи сталкиваются?)
Для двух кругов : просто убедитесь, что их центры больше, чем сумма их радиусов друг от друга.
Для двух прямоугольников : проверьте, находятся ли какие-либо их угловые координаты внутри другого прямоугольника.
Для всего, что связано с более сложными полигонами , вам понадобится Теорема о разделяющей оси , которая является темой для другого вопроса.
Подводные камни : Есть действительно много других типов столкновений, которые вы можете рассмотреть. Некоторые из них действительно сложны: выпуклые многоугольники могут пересекаться несколько раз !
Шаг 2: Разрешение столкновений (Раздвигая их.)
Простым методом разрешения коллизий является перевод с минимальным проникновением , используя значения, полученные из обнаружения коллизий. По сути, это включает в себя перемещение объектов друг от друга с минимально возможным расстоянием перемещения.
В качестве примера рассмотрим столкновение окружность-окружность, когда одна из окружностей зафиксирована на месте. Вектор минимального смещения имеет то же направление, что и разница между их векторами средней точки. Его длина - это разница между суммой их радиусов и расстоянием между центрами.
Эта идея легко обобщается на другие формы.
Подводные камни : Если оба сталкивающихся объекта являются подвижными, вам, возможно, придется переместить оба из них на некоторую долю от общего расстояния, чтобы получить правдоподобное приближение их движения. Очевидно, им придется двигаться в разных направлениях.
Шаг 3: Физика столкновений (Другие изменения.)
Наиболее очевидная вещь, которая имеет место, состоит в том, что один или два объекта изменяют направление, то есть поворачивает вектор скорости. Это довольно легко реализовать.
Подводные камни : объекты могут быть эластичными , но они могут не быть , в этом случае общая энергия в системе уменьшается. Вам может понадобиться сопротивление из-за сопротивления воздуха. Трение (особенно статическое трение ), как известно, сложно реализовать .
Некоторые выводы
Имитация реальности экспоненциально сложнее, чем больше, если вы хотите имитировать. Вы попадаете в минное поле бесчисленных крайних случаев, невероятно сложных формул и постоянно растущих стопок исследовательских работ.
Если ваши потребности просты или вы хотите учиться, попробуйте.
Если ваши потребности сложны или вам не нравится математика, попросите физический движок замаскировать детали для вас. Box2D и Bullet довольно популярны в играх.
источник
Я думаю, что это может быть полезно: http://gafferongames.com/game-physics/integration-basics/
источник
Вероятно, самый полный ресурс стиля учебника:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/
См. Также связанные статьи из того же блога:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an- непрерывное столкновение двигателя подход части-1 /
источник
Лучший ресурс для изучения игровой физики, с которым я когда-либо сталкивался, связан с Крисом Хеккером из «Spy Party»:
http://chrishecker.com/Rigid_Body_Dynamics
источник