Иллюстрированный самоучитель по созданию Flash-игр

Поймай яблоко

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

Иллюстрированный самоучитель по созданию Flash-игр › Игры типа "Поймай или пропусти" › Поймай яблоко
Рис. 9.3. Если центр яблока попадает в прямоугольную область размером 50x20 пикселов, расположенную вокруг центра корзины, оно считается пойманным

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.