Многие уже видели игру SnailBoy в интервью на сайте Adobe. Кто не видел — почитайте. Кто не желает тратить время — просто вкратце переведу суть и в конце интересную вещь напишу, которую выудил совершенно случайно :)
Я тут решил сделать клон пушкиновую оригинальную игру с физикой, и задался вопросом, в чем делать уровни. Делать свой редактор сильно лень (это вообще преобладающее чувство последнее время). Flash IDE у меня нет. В общем решил посмотреть на Inkscape. Оказалось, что svg довольно простой формат для обработки. Не скажу, что я решил свою задачу полностью (см.выше про лень), но загрузка данных для физики из svg у меня есть.
Как мы можем повлиять на тело в nape? Можно просто указать ему новое положение или скорость — но такое воздействие лежит за пределами физической симуляции, можно прицепить к нему constraint — это вполне в рамках физики, но не всегда подходит, есть еще один вариант, и его мы не рассматривали, — можно приложить к телу силу или импульс.
Читать дальше →
По сравнению, с той версией, что использовалась при написании первой части, были исправлены всякие ошибки в nape, в том числе касающиеся темы данной статьи, при написании примеров к этой статья я использовал версию m6.1 r61.
Соединения тел
Соединения тел в nape называются Constraint, более правильно это перевести как ограничение взаимного движения тел, но я буду все равно называть их соединениями. В nape есть следующие виды соединений:
PivotJoint — самое привычное соединение, два тела соединяются так, что две точки на них всегда совпадают
DistanceJoint — расстояние между двумя заданными точками двух тел поддерживается в заданных пределах
LineJoint — точка на одном теле движется по отрезку на другом теле
WeldJoint — два тела движутся полностью вместе, как если бы все их фигуры добавили к одному телу
AngleJoint — ограничивает угол поворота одного тела относительного другого в заданных пределах. Тела при этом могут разлететься как угодно далеко, так что обычно стоит использовать вместе с PivotJoint. Кроме того можно задавать соотношение углов поворота: это может пригодится, например, при создании чего-то вроде шестеренок.
MotorJoint — задает соотношение скоростей вращения двух тел. При определенных параметрах может использоваться как мотор. Также имеет смысл использовать вместе с PivotJoint.
Казалось бы уже рассматривали создание тел, тем не менее мне задают вопросы в личку, а значит мало рассматривали.
Тело (Body) в nape — это нечто, обладающее массой, моментом инерции, текущим положением и углом поворота, а также скоростями движения и вращения. Одно тело может состоять из нескольких фигур (Shape). У каждого тела есть своя собственная локальная система координат, которая движется и вращается вместе с телом, таким образом при движении тела в его собственной системе координат все фигуры остаются на месте. Для преобразования между системами координат у класса Body есть методы worldToLocal и localToWorld.
Читать дальше →
По хорошему этот пост должен был идти вторым, а не третьим. Когда я начал писать очередной пост про nape, я понял, что до сих пор изложение было довольно сумбурным и непоследовательным. Думаю, оно и дальше будет таким же, но все же предлагаю навести небольшой порядок, чтобы было легче двигаться дальше.
Читать дальше →
В новом nape предусмотрена обработка самых разных событий:
1. Засыпание/просыпание тела;
2. Засыпание/просыпание соединения (ограничения взаимного движения, joint) тел;
3. Превышение допустимой нагрузки и разрыв соединения тел;
4. Начало/конец/продолжение контакта между телами.
На сегодняшний день впрочем не реализована большая часть этих возможностей.
Читать дальше →
Все, наверное, слышали про физический 2d движок nape, как и про то, что уже некоторое время его автор делает новую версию, с другим API и внутри тоже другую. Я понемногу ковыряюсь в том, как этой новой версией пользоваться, и решил написать небольшое введение.
Читать дальше →