Вопрос

Я ищу несколько хороших ссылок для изучения того, как моделировать 2d-физику в играх.Я такой и есть нет ищу библиотеку, которая сделала бы это за меня - я хочу думать и учиться, а не слепо использовать чужую работу.

Я хорошенько погуглил, и хотя я нашел несколько руководств по GameDev и т.д., я нахожу их трудными для понимания, потому что они либо написаны плохо, либо предполагают уровень математического понимания, которым я пока не обладаю.

Для конкретики - я ищу, как смоделировать 2d-игру сверху вниз, вроде танковой боевой игры, и я хочу точно смоделировать (среди прочего) ускорение и скорость, нагревание "компонентов", столкновения между моделями и границами уровней, а также оружие ракетного типа.

Веб-сайты, рекомендуемые книги, блоги, примеры кода - все это приветствуется, если поможет пониманию.Я рассматриваю возможность использования C # и F # для создания своей игры, поэтому примеры кода на любом из этих языков были бы великолепны, но не позволяйте языку помешать вам разместить хорошую ссылку.=)

Редактировать:Я не имею в виду, что я не разбираюсь в математике - скорее, я не знаю, что мне нужно знать, чтобы понять задействованные системы, и на самом деле не знаю, как найти ресурсы, которые научат меня понятным способом.

Это было полезно?

Решение

Вот некоторые ресурсы, которые я собрал несколько лет назад.Следует отметить интеграцию с Verlet.Я также включаю ссылки на некоторые физические движки с открытым исходным кодом и коммерческие программы, которые я нашел в то время.Здесь есть статья stackoverflow на эту тему: физика 2d игры?

Физические методы

Книги

  • "Разработка игрового физического движка", Иэн Миллингтон - у меня есть эта книга, и я настоятельно рекомендую ее.В книге с нуля создается физический движок на C ++.Автор начинает с фундаментальной физики элементарных частиц, а затем добавляет "законы движения", ограничения, физику твердого тела и так далее.Он включает в себя хорошо документированный исходный код на всем протяжении.

Физические Движки

Другие советы

Исходя из опыта, реализовать физический движок 2D довольно сложно. Я подробно опишу несколько шагов, которые я предпринял при создании своего движка.

<Ол>
  • Обнаружение столкновения. Обнаружение столкновений может быть сложной проблемой, даже если вы не имеете дело с трехмерными мирами или сетевым моделированием. Для физики 2D вы определенно хотите использовать теорему о разделении осей . Как только вы внедрили SAT, вы на полпути сделали динамическую часть вашего движка.

  • Кинематика / Динамика. Крис Хеккер написал отличный интернет-ресурс , который шаг за шагом помог мне разобраться с реакцией на столкновение.

  • Все остальное. Как только вы закончите обнаружение столкновений / ответ, закончите реализацию всего, что вы хотите, в движке. Это может включать трение, контактные усилия, соединения, а также все, что вы можете придумать.

  • Веселись! Создание собственного симулятора физики - невероятно полезный опыт.

    Это отличный учебник, который демонстрирует концепции двумерной физики с использованием вспышки и не является специфическим для флэш http://www.rodedev.com/tutorials/gamephysics/game_physics.swf

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

    Оригинальный ответ:

    Что, нет упоминания о Box2D ? Это открытый проект со стороны сотрудника Blizzard, с хорошим сообществом, и, ну, отлично работает.

    В своем (кратком) опыте с Box2D, интегрировав его с Torque Game Builder, я обнаружил, что API прост в использовании, документация понятна, он поддерживает все физические объекты, которые я ожидал (в частности, требовались соединения), и сообщество выглядело дружелюбным и активным (где-то в начале 2010 года).

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

    Это решение, основанное на островах, показалось довольно быстрым, как я и ожидал от его репутации, а не от того, что проводил какие-либо серьезные тесты производительности.

    В F # есть функция, называемая Единицы измерения который выполняет за вас анализ размеров, выдавая ошибки, если вы ошибаетесь.Например, если вы скажете:

    let distance : float<meters> = gravity * 3.0<seconds>
    

    Это привело бы к ошибке компиляции, поскольку гравитация равна < метров/секунд^2 > и не < метры >.Кроме того, поскольку F # - это просто .NET, вы можете написать свой математический / физический код в библиотеке классов и ссылаться на него из вашего C #.

    Я бы порекомендовал вам ознакомиться с этими записями в блоге для получения дополнительной информации:

    Это отличный ресурс для написания вашего первого движка. Он в 3D, но его очень легко преобразовать в 2D. Я знаю по крайней мере одну крупную компанию, которая следовала этому руководству для своего внутреннего движка, и я лично следовал его шагам для моего собственного движка. Он объясняет все основные физические понятия в физике, основанной на весне / импульсе, и показывает, как написать свой собственный интегратор.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top