Поворот объекта за мышкой во Flash

Всем привет!

Во многих играх нам необходимо, чтобы какой-либо игровой объект поворачивался в сторону нашего курсора.

Давайте сделаем что-нибудь такое, чтобы это тоже было в нашей копилке наработок)

Что будем делать?

Я решил сделать 2 вида объекта для примера.

1-й объект — это лук со стрелой, будет с ограниченным поворотом по углам, поворачиваться будет моментально за мышкой.

2-й объект — это башня танка, у неё нет ограничений по углам поворота и она будет поворачиваться с определённой скоростью.

В результате мы хотим получить вот такую картину:

Графика

Графику мы будем использовать по такому же принципу как описано в статье Рисуем в IDE, а кодим в FD. Я заранее подготовил графику в виде 4-х png файлов:

materialsДалее импортировал эти файлы в библиотеку созданного .fla файла. Лук и стрелу объединил в один клип, а корпус танка и башню в разные, т.к. башня будет поворачиваться отдельно от корпуса.

Все объекты в графике изначально повёрнуты вправо, т.к. это совпадает с углом флеш-объекта = 0 градусов.

Пушка танка на png повёрнута вниз, поэтому я повернул её вправа уже в самом клипе пушки.

Далее я объединяю клипы лука, корпуса танка и пушки в 1 клип (mcScene), располагаю их там как хотел бы видеть их в игре и даю имена клипам лука (bow) и пушки (tower), чтобы потом легко определить их в коде.

лук и танк во flashПаблишим библиотеку в swc и всё, на этом с графикой закончили.

Код

Создаём новый проект в FD, подключаем библиотеку swc и кодим.

Приведу результат трудов в виде листинга кода главного класса:

Всё уместилось в 1 файле и + 1 функция (MyMath.getAngle2Deg()) из моих личных запасов, которая находит угол между двумя точками с вершиной в координатах (0;0).

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

Вся соль заключается в формулах и алгоритмах расчёта правильного угла поворота.

Материалы

Архив с исходниками: rotateToMouse.rar