Перемещение объектов мышкой в Box2D Flash

Всем привет! В этой статье я расскажу как таскать физические объекты в Box2D мышкой.

И делать мы это будем во Flash.

Цель

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

Можно зажимать ЛКМ на объектах и таскать их, а когда вы отожмёте кнопку, то объект отцепляется от мыши:

Реализация

За основу возьмём проект из статьи Основы Box2D и дополним его новым функционалом.

Вся идея состоит в том, что при нажатии мыши мы создаём специальное соединение (joint) средствами физического движка между мышью и мировым телом. А затем, при дальнейшем движении мыши, мы обновляем точку крепления к мировому телу исходя из координат мыши на нём.

Строка 37: Для соединения с мышкой существует специальный класс b2MouseJoint. Объявляем нашу переменную соединения в переменных класса.

Строки 179-206: Специальная функция GetBodyAtMouse для определения физического тела под курсором мыши. Она нам понадобится в момент нажатия мыши.

Строки 214-242: Создание соединения мы производим в событии MOUSE_DOWN, а уничтожение соединения в MOUSE_UP.

Строки 244-249: Специальная функция уничтожения соединения. Используется в несколькоих местах, чтобы не случилось такого, что старое соединение осталось и создалось новое.

Строки 260-263: Не забываем обновлять координаты крепления соединения (если оно создано) относительно позиции курсора мыши.

Вот и все дела!

Материалы

Исходник можно скачать тут: box2dMouseJoint