Поймай яблоко
После задания переменной dx клип лисы перемешается на расстояние, соответствующее указанной величине. Затем проверяется, совпадает ли новое положение с левой и правой границами экрана.
Если движение лисы продолжается, а клип лисы неподвижен, задается его переход к кадру "run", чтобы создать впечатление бегущей лисы. С другой стороны, если лиса не двигается, но в то же время и не находится в кадре 1, задается переход клипа к этому кадру, и создается впечатление, будто лиса стоит.
function
moveFox() {
// Проверяем, нажаты ли клавиши со стрелками,
if
(Key.isDown(Key.RIGHT)) {
dx
=
10
;
// Поворачиваем лису направо.
fox._xscale
=
-
Math.abs(fox._xscale);
}
else
if
(Key.isDown(Key.LEFT)) {
dx
=
-
10
;
// Поворачиваем лису налево.
fox._xscale
=
Math.abs(fox._xscale);
}
else
{
// Не двигаемся.
dx
=
0
;
// Передвигаем лису.
fox._x
+
=
dx;
if
(fox._x
<
30
)
fox._x
=
30
;
if
(fox._x
>
520
)
fox._x
=
520
;
// Меняем поведение лисы (стоит или бежит).
if
((dx !
=
0
) and (fox._currentFrame
=
=
1
)) {
fox.gotoAndPlay(
"run"
);
}
else
if
((dx
=
=
0
) and (fox._currentFrame !
=
1
)) {
fox.gotoAndPlay(
"stand"
);
}
}
}
Один раз в каждом кадре вызывается функция dropNewapple. Необходимость создания нового яблока определяется тремя вложенными условными выражениями.
Прежде всего проверяется переменная timeSinceLastapple. Условие выполняется только в случае, если ее значение больше 20. Переменная увеличивается на 1 в конце функции.
В следующей проверке определяется, соответствует ли количество упавших яблок общему количеству яблок, которое должно быть сброшено.
Наконец, функция Math.random() задает 10-процентную вероятность того, что яблоко упадет. В результате интервал между падениями двух яблок будет всегда разным.
Для создания нового клипа яблока используется функция attachMovie. Горизонтальное положение ролика выбирается в диапазоне между 30 и 520. Каждый раз при создании нового яблока значение переменной appleSpeed увеличивается.
function
dropNewApple() {
// Бросаем яблоко, если прошло достаточно времени,
if
(timeSinceLastApple
>
20
) {
// Бросаем, если не превышено
// предельное количество яблок, которые можно бросить
if
(lastApple) {
// Устанавливаем вероятность падения яблока в 10%.
if
(Math.random()
<
.
1
) {
// Создаем объект-яблоко.
lastApple
+
+
;
attachMovief
"apple"
,
"apple"
+
lastApple, lastApple);
_root[
"apple"
+
lastApple]._x
=
Math.random !)
*
490
+
30
;
_root[
"apple"
+
lastApple]._y
=
0
;
// Сбрасываем счетчик времени ожидания.
timeSinceLastApple
=
0
;
// Увеличиваем скорость падения яблока
if
(appleSpeed
<
10
)
appleSpeed
+
=
.
5
;
}
}
}
// ЕСЛИ не бросили яблоко, сокращаем время ожидания.
timeSinceLastApple
+
+
;
}
Функция, выполняющая перемещение яблок, должна не только изменять их вертикальное положение, но и проверять, упало ли яблоко на землю или в корзину.
Чтобы определить, упало ли яблоко на землю, функция должна проверить, находится ли яблоко ниже нижней границы экрана. Определить попадание в корзину немного сложнее: необходимо установить, соответствует ли расстояние между яблоком и лисой заданному диапазону. Если яблоко находится от лисы на расстоянии в 10 пикселов по вертикали и 25 пикселов по горизонтали, считается, что оно попало в корзину. Имейте в виду, что центр клипа с лисой находится в центре изображения корзины, поэтому положение корзины фактически определяется положением всего клипа с лисой. На рис. 9.3 показан прямоугольник, который представляет область попадания.
Рис. 9.3. Если центр яблока попадает в прямоугольную область размером 50x20 пикселов, расположенную вокруг центра корзины, оно считается пойманным