Давно хотел поразбираться с физическими движками и вот, наконец-то, дошли руки. Все движки похожи друг на дружку, то есть оперируют одинаковыми понятиями - есть физический мир, разные виды тел с физическими характеристиками, соединения, коллизии и прочее. Отличаются API, платформами/языками реализации и возможностями.
Для примера выбрал box2dweb - javascript-клон другого популярного движка.
Начинаем подготовку - подключим на страницу библиотеку и создадим объект canvas, который будет отображать сотворенный нами физический мирок.
В разных примерах и руководствах рекомендуют вынести в переменные из пространств имен, например:
Далее необходимо задать параметры физического мира (Box2D.Dynamics.b2World) и вдохнуть в него жизнь, то есть инициализировать игровой цикл для анимации.
Допустим, мир готов. Но он пуст, в нем есть только бесполезные законы физики - нечему существовать и действовать по этим законам, поэтому нужно создать тела с физическими характеристиками и разнообразным внешним видом и позиционированием.
Как и обычный мир, виртуальный мирок имеет гравитацию (задается в конструкторе мира) и она, естественно, действует на все существующие динамические объекты, то есть все тела в мире самостоятельно без нашего вмешательства падают в направлении вектора силы тяжести. Также, тела взаимодействуют (сталкиваются и отталкиваются) друг с другом и статическими объектами согласно своим физическим параметрам (плотность, трение, упругость и др.).
В некоторых случаях нам необходимо связать между собой тела. В наличии есть несколько простейших типов соединений, которые можно комбинировать, например:
Небольшая демка http://yasla.net/box2d/test.html
Для примера выбрал box2dweb - javascript-клон другого популярного движка.
Начинаем подготовку - подключим на страницу библиотеку и создадим объект canvas, который будет отображать сотворенный нами физический мирок.
В разных примерах и руководствах рекомендуют вынести в переменные из пространств имен, например:
var b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape;делается это для сокращения и упрощения написания кода, а то в серьезном проекте будет много кода, да и сама библиотека немаленькая.
Далее необходимо задать параметры физического мира (Box2D.Dynamics.b2World) и вдохнуть в него жизнь, то есть инициализировать игровой цикл для анимации.
Допустим, мир готов. Но он пуст, в нем есть только бесполезные законы физики - нечему существовать и действовать по этим законам, поэтому нужно создать тела с физическими характеристиками и разнообразным внешним видом и позиционированием.
Как и обычный мир, виртуальный мирок имеет гравитацию (задается в конструкторе мира) и она, естественно, действует на все существующие динамические объекты, то есть все тела в мире самостоятельно без нашего вмешательства падают в направлении вектора силы тяжести. Также, тела взаимодействуют (сталкиваются и отталкиваются) друг с другом и статическими объектами согласно своим физическим параметрам (плотность, трение, упругость и др.).
В некоторых случаях нам необходимо связать между собой тела. В наличии есть несколько простейших типов соединений, которые можно комбинировать, например:
- DistanceJoint - жесткое соединение.
- RevoluteJoint - болтовое соединение.
- PrismaticJoint - призматическое соединение.
- PulleyJoint - талевое соединение.
- GearJoint - передаточное соединение.
- MouseJoint - мышинное соединение.
- WeldJoint - сварное соединение.
- FrictionJoint - соединение трения.
- LineJoint - линейное соединение.
Небольшая демка http://yasla.net/box2d/test.html
Комментариев нет:
Отправить комментарий