Поймай яблоко
После задания переменной 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 пикселов, расположенную вокруг центра корзины, оно считается пойманным
