Одна из новых функций в анализируемой игре – aimStraw. Она заменит функцию moveFox и будет вызываться из клипа «actions», которому назначен следующий код:
onClipEvent(load) {
_root.initGame();
}
onClipEvent(enterFrame) {
_root.newBalloon ();
_root.moveBalloons();
_root.aimStraw();
_root.moveBullets();
}Задача функции aimStraw – вычислить угол прицела и затем задать поворот клипа соломинки. Значение угла сохраняется в переменной strawRadians, которая используется функцией shootBullet. Для того чтобы вычислить угол между двумя точками, прежде всего необходимо определить значение разницы между горизонтальными и вертикальными координатами точек. Они хранятся в переменных dx и dy функции. Задав эти значения в функции Math.atan2, вы получите значение угла в радианах.
Совет
Углы измеряются в радианах или градусах. Полный круг в радианах будет равен 6,28 (2π), в градусах – 360. Радианы используются Flash в математических функциях наподобие Math.sin и Math.cos, а градусы – в параметрах клипов _rotation. Поэтому вы должны уметь преобразовывать значения из одних единиц измерения в другие.
Примечание
Функция Math.atan2 является прекрасным инструментом для программирования игр. Арктангенс (во Flash – Math.atan) представляет собой функцию, вычисляющую угол наклона линии. Так как такой наклон определяется двумя точками, с помощью арктангенса можно преобразовать координаты этих точек в значение угла наклона. Однако при использовании арктангенса не учитывается, какая точка линии является анкером, а какая указателем, задающим угол. Поэтому легко получить углы, противоположные по значению тем, которые вам необходимы. Для того чтобы учесть различные варианты, необходимо написать несколько условных выражений. Функция Math.atan2(y,x) вычисляет угол наклона линии между началом координат и точкой с координатами (x, y,). Тем самым решается проблема неоднозначности.
function aimStraw() {
// Определяем разницу координат начала
// и конца линии.
dx = _xmouse – straw._x;
dy = _ymouse – straw._y;
// Вычисляем угол наклона.
strawRadians = Math.atan2(dy,dx);
// Переводим полученное значение в градусы.
strawDegrees = 360*strawRadians/(2*Math.PI);
straw._rotation = strawDegrees;
}
Теперь при запуске пули в массив bullets будет записано больше информации. Чтобы осуществлять перемещение объекта-пули в каждом кадре, нам необходимо знать угол, под которым он был выпущен.
К каждому объекту массива bullets будет добавлен параметр down, описывающий силу гравитации, действующую на пулю. Исходное значение этого параметра – 0.
Для того чтобы пуля вылетала из кончика соломинки, ее координаты должны иметь значение, равное значению координат соломинки плюс 20 пикселов (длина соломинки чуть больше 20 пикселов). Эти пикселы необходимо распределить (найти значения катетов при заданной гипотенузе и угле) между координатами x и y при помощи функций Math.sin и Math.cos для того, чтобы получить горизонтальную и вертикальную стороны угла.