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

Подстрели лису

Подготовка ролика

Наиболее сложным является создание клипов. Чтобы лучше понять, о чем пойдет речь в этом разделе, внимательно изучите ролик Shootafox.fla.

В библиотеке вы увидите три клипа: Peeking Fox (Выглядывающая лиса), Running fox (Бегущая лиса) и Swinging fox (Раскачивающаяся лиса). Каждый из этих клипов состоит из одного кадра или короткой анимации лисы, за которой следует короткая анимация, изображающая удивленную лису, обведенную желтым контуром. Первая часть соответствует, движению живой лисы, вторая часть обозначает, что пользователь зверька. Вторая часть начинается с кадра, имеющего метку "hit". Ролик также включает семь клипов с именами "fox()" – "fox6". Эти клипы содержат внутри себя один из вышеописанных клипов, однако теперь, анимация изображает, как лиса движется по игровому полю или выглядывает из-за дерева. Клипы, расположенные внутри каждого из клипов с именами "fox0" – "fox6", содержат метку "fox", благодаря чему код может обращаться к ним. Для того чтобы показать, что лиса поражена, копия клипа "fox", находящегося внутри клипов "fox0" – "fox6", переходит к кадру "hit".

Большое значение имеет распределение слоев. Ролик состоит из 15 слоев, представляющих собой либо элементы обстановки (в данном случае лес), либо самих лис. Это позволяет прятать лис за одними предметами и показывать перед другими. Отдельные слои зарезервированы для клипов "actions" и "cursor".

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

Как и остальные ролики, рассматриваемые в данной главе, этот ролик включает начальное окно игры, саму игру и окно завершения игры.

Создание кода

Как и в предыдущих примерах, основной код назначен клипу "actions". Первая часть кода – функция onClipEvent (load). Клип устанавливает счета на 0 и инициализирует переменную shotsLeft, которой присваивается значение 50. Это позволяет игроку сделать 50 выстрелов и убить как можно больше лис. Переменная shotsLeft используется для отображения счета на экране, а переменная showshotsLeft, связанная с текстовой областью, отображает, сколько выстрелов осталось у игрока.

При помощи функции Mouse.hide () в блоке onClipEvent (load) скрывается курсор мыши.

onClipEvent(load) {
    // Задаем время между появлениями лис.
    timeBetweenFoxes = 2000;
    // Вычисляем, когда должна появиться следующая лиса.
    nextFox = getTimer() + timeBetweenFoxes;
    // Инициализируем переменную, содержащую количество
    // попаданий и число выстрелов.
    score = 0;
    shotsLeft = 50;
    _root.showScore = "Score:" + score;
    _root.showShotsLeft = "Shots Left:" + shotsLeft;
    // Прячем курсор.
    Mouse.hide();
}

Использование объекта Mouse позволяет контролировать видимость курсора, расположенного над рабочим полем ролика. При помощи команды Mouse.hide() вы можете скрыть курсор, при помощи команды Mouse.show () – вновь вывести его на экран. Так как курсор скрыт, его необходимо заменить чем-нибудь, чтобы игрок видел, по какому месту экрана он щелкает. В данном случае клип "cursor" ставится в соответствие положению курсора мыши. В остальном функция onClipEvent (enterFrame) повторяет аналогичную функцию игры "Поймай лису".

onClipEvent(enterFrame) {
    // Передвигаем курсор.
    _root["cursor"]._x = _root._xmouse;
    _root["cursor"]._y = _root._ymouse;
    // Проверяем, не пора ли показывать следующую лису
    if (getTimer() >= nextFox) {
        // Сокращаем время до следующего появления лисы.
        timeBetweenFoxes -= 5;
        // Проверяем, не завершена ли игра
        if (shotsLeft < 1) {
            _root.gotoAndPlay("End");
            // Если нет, показываем новую лису.
        }
        else {
            // Задаем появление новой лисы,
            while (true) {
                fox = int(Math.Random() * 7);
                if (_root["fox" + fox]._currentFrame == 1) {
                    break;
                }
            }
            // Начинаем анимацию лисы.
            _root["fox" + fox].gotoAndPlay(2);
            // Вычисляем момент появления следующей лисы.
            nextFox = getTimer() + timeBetweenFoxes;
        }
    }
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.