Стрельба по воздушным шарам
Функция moveBalloons проверяет, все ли шары созданы и все ли шары исчезли, что говорит об окончании игры.
function moveBalloons() { // Перемещаем все шары, for (i = balloons.length - 1; i >= 0; i--) { // Определяем скорость шара //и получаем ссылку на клип, dx = balloons[i].d; balloon = _root[balloons[i].clip]; // Перемещаем шар. balloon._x += dx; // При вылете за экран шар удаляется, if ((dx < 0) and (balloon._x < -20)) { balloon.removeMovieClip(); balloons, splice(i, 1); } else if ((dx > 0) and (balloon._x > 570)) balloon.removeMovieClip(); balloons.splice(i, 1); // Если шары закончились, игра завершается. if ((nextBalloon >= numBalloons) and (balloons.length < 1)) { gotoAndStop("game over"); } } }Функция moveFox определяет, нажаты ли клавиши со стрелками "влево" или "вправо", и перемешает лису на 10 пикселов влево или вправо при нажатии соответствующей клавиши. Как и в предыдущих играх, параметр _xscale клипа, содержащего лису, используется для поворота лисы. Функция также задает переход клипа к анимационной последовательности (изображает идущую лису и начинается в кадре 2), а также к кадр (изображает стоящую лису).
function moveFox() { // Подвинуть лису влево. if (Key.isDown(Key.LEFT)) { dx = -10; fox._xscale = Math.abs(fox._xscale); // Подвинуть лису вправо, перевернув ее клип по вертикали. // То есть изменив знак у свойства _scale, мы создаем зеркальное отражение клипа; лиса теперь идет в другую сторону. } else if (Key.isDown(Key.RIGHT)) { dx = 10; fox._xscale = -Math.abs(fox._xscale); // Иначе лиса не двигается. } else { dx = 0; // Перемещаем лису. fox._x += dx; if ((dx == 0) and (fox._currentFrame != 1)) { // Переходим к кадру, в котором лиса стоит, fox.gotoAndStop(1); } else if ((dx != 0) and (fox._currentFrame == 1)) { // Переходим к кадру, где лиса бежит. fox.gotoAndPlay(2); } } }Для того чтобы выстрелить, пользователь должен нажать на клавишу пробела. На нажатие клавиши реагирует скрытая кнопка, которая вызывает функцию shootBullet. Код кнопки будет рассмотрен далее, в разделе "К сведению".
Функция shootBullet проверяет, прошло ли достаточно времени после предыдущего выстрела. Это не дает игроку возможности стрелять залпом по всем мишеням.
Подобно шарам снаряды представлены одновременно клипом и элементом массива, в данном случае массива bullets. Массив используется функцией moveBullets для осуществления выстрелов.
Обратите внимание, что движение клипа, содержащего снаряд, начинается в точке, расположенной в 2 пикселях вправо и 55 пикселях влево от центра клипа лисы. Эта точка соответствует кончику соломинки.
function shootBullet() { // Проверяем, что с момента // предыдущего выстрела прошло достаточно времени. if (getTimer() > nextBulletTime) { // Создаем новую пулю. attachMovie("bullet", "bullet" + nextBullet, nextBullet + 9999); // Устанавливаем ее координагы. _root["bullet" + nextBullet]._x = fox._x + 2; _root["bullet" + nextBullet]._y = fox._y - 55; // Добавляем новую пулю к массиву. bullets.push(nextBullet); // Изменяем значение переменных, отвечающих //за появление пуль. nextBullet++; nextBulletTime = getTimer() + 1000; } }Функция moveBullets работает аналогично функции moveBalloons, но перемещает снаряды не вправо и влево, а вверх. Она проверяет одно из следующих условий: снаряд достиг верхнего края экрана либо попал в шар и вызвал функцию checkCollision. В обоих случаях и клип, и элемент массива удаляются.
function moveBullets() { // Проверяем, попали ли пули в шар. for (i = bullets.length - 1; i >= 0; i--) { // Выбираем элемент. bullet = _root["bullet" + bullets[i]]; // Передвигаем пулю вверх, bullet._y -= 10; // Выясняем, достигла ли она конца экрана, if (bullet._y < 0) { bullet.removeMovieClip(); bullets.spliced, 1); // Определяем, не попал ли игрок по шару. } else { if (checkCollision(bullet)) { bullet.removeMovieClip(); bullets.splice(i, 1); } } } }