Стрельба по воздушным шарам
Функция 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
);
}
}
}
}