Поймай лису
Функция 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 лис. Игра может заканчиваться и после того, как произведено определенное количество щелчков. Ваша игра может состоять из нескольких уровней. Поразив заданное число лис, пользователь переходит к другому уровню.
