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

Поймай лису

Функция getTimer () – это своеобразные часы. Функция возвращает количество миллисекунд, прошедших после начала ролика. Значение этих часов постоянно увеличивается, поэтому данную функцию удобно использовать для управления временными интервалами в вашей игре.

Функция onClipEvent (enterFrame) определяет, наступило ли время для появления следующей лисы. Затем она выбирает такое новое отверстие, которое не используется в данный момент. Интервал времени между появлениями лис сокращается на 10 миллисекунд, в результате чего игра с каждым разом все больше ускоряется. Если значение интервала составляет менее 1000 миллисекунд, игра завершается. За 150 секунд пользователь получает 100 возможностей поразить лису.

onClipEvent(enterFrame) {
    // Определяем, не пора ли показывать следующую лису,
    if (getTimer() >= nextFox) {
        // Сокращаем время между показами.
        timeBetweenFoxes -= 10;
        // Выясняем, не пора ли заканчивать игру,
        if (timeBetweenFoxes < 1000) {
            _root.gotoAndPlay("End");
            // Если нет, показываем следующую лису.
        }
        else {
            // Увеличиваем счетчик показанных лис.
            numFoxes++;
            _root.showScore = score + "/" + numFoxes;
            // Определяем, какая лиса покажется,
            while (true) {
                fox = Int(Math.Random() * 18);
                if (_root["fox" + fox]._currentFrame == 1)
                    break;
                // Выбранная лиса появляется из отверстия.
                _root["fox" + fox].gotoAndPlay("popup");
                // Устанавливаем время появления следующей лисы.
                nextFox = getTimer() + timeBetweenFoxes;
            }
        }
    }
}

Следующая функция обрабатывает нажатия кнопки мыши пользователя. Здесь используется тот же самый прием, что и в игре "Найди лису": программа проверяет клипы на попадание по ним при помощи функции hitTest.

Также программа проверяет, воспроизводится ли анимационная последовательность, в которой лиса выглядывает из отверстия. Кадр 1 клипа является статическим и представляет собой простое отверстие. Кадры 2-24 – это анимация лисы, которую поразил пользователь. Пользователь может щелкнуть по лисе только во время анимации, в которой лиса выглядывает из отверстия (эта анимация начинается с кадра 25). Таким образом, если номер кадра больше, чем 24, щелчок разрешается. В противном случае он игнорируется.

onClipEvent(mouseDown) {
    // Определяем, по какому месту щелкнул пользователь.
    x = _root._xmouse;
    y = _root._ymouse;
    // Проверяем на попадание всех лис.
    for (i = 0; i < 18; i++) {
        // Проверяем только выглядывающих лис.
        if (_root["fox" + i]._currentFrame > 24) {
            // Выясняем, попал ли пользователь по лисе,
            if (_root["fox" + i].hitTest(x, y, false)) {
                // Воспроизводим анимацию, соответствующую попаданию.
                _root["fox" + i].gotoAndPlay("whack");
                // Увеличиваем количество очков.
                score++;
                _root.showScore = score + "/" + numFoxes;
            }
        }
    }
}

К сведению

Как обычно, в некоторые места сценария необходимо добавить дополнительный код. В основной кадр, а также в кадры начала и завершения игры необходимо поместить команду stop (). В нашем примере эти кадры являются отдельными сценами.

Другие возможности

Имейте в виду, что клипы, изображающие лис, не обязательно должны быть одинаковыми. Сценарий реагирует только на метки "whack" (удар) и "popup" (выглядывающая лиса), а после 24 кадра еще и на начало анимации выглядывающей лисы. Вы можете использовать несколько клипов, изображающих разных лис. Необходимо лишь убедиться, что они достаточно похожи для того, чтобы код мог их обрабатывать, а также присвоить им соответствующие имена при размещении экземпляров клипов на рабочем поле. Использование различных лис сделает игру интереснее.

Завершение игры может быть задано различными способами. В нашем примере ролик воспроизводится, пока интервал между появлениями лис не будет меньше одной секунды, что соответствует появлению 100 лис. Игра может заканчиваться и после того, как произведено определенное количество щелчков. Ваша игра может состоять из нескольких уровней. Поразив заданное число лис, пользователь переходит к другому уровню.

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