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

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

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

Фон ролика представляет собой сложное изображение, которое, однако, не играет никакой роли. Активными элементами игры являются только яблоки и лиса. Эталоны этих клипов хранятся в библиотеке, но ни один из них не размешается на рабочем поле. Они создаются при помощи кода по мере необходимости.

Клип, содержащий яблоко, представляет собой статическое изображение. Клип с лисой более сложный. Его первый кадр, помеченный "stand", содержит изображение неподвижной лисы. Второй кадр, "run", представляет собой начало анимации, в которой ноги лисы двигаются. В последнем кадре анимации содержится функция gotoAndPlay, возвращающая клип к кадру "run". В результате мы имеем два варианта поведения клипа с лисой: первый – клип остается в кадре 1; второй запускает анимацию всех кадров, начиная с кадра 2.

Так как и лиса, и яблоки появляются в ролике только после соответствующего запроса кода, в диалоговом окне Linkage properties содержащим их эталонам необходимо назначить свойство "Export for ActionScrip. Яблоко получает идентификатор "apple", лиса – идентификатор "running fox".

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

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

Сценарий, назначенный клипу "actions", вызывает функции главной временной шкалы ролика. Это упрощает код, так как перед именами клипов не нужно добавлять префикс _root. После загрузки клипа код вызывает функцию initGame, а затем вызывает три функции при каждом обращении к кадру.

onClipEvent(load) {
    root.initGame();
}
onClipEvent(enterFrame) {
    _root.moveFox();
    _root.dropNewApple();
    _root.moveApples();
}

Таким образом, вся работа осуществляется четырьмя функциями, которые находятся в главной временной шкале. Рассмотрим каждую из них.

Первая функция, initGame, инициализирует в начале игры целый ряд переменных. Она создает и клип с лисой. Этот клип создается при помощи кода, а не добавляется при создании ролика потому, что лиса должна располагаться поверх яблок. Если бы клип лисы создавался одновременно с роликом, тогда каждое яблоко, созданное кодом, помещалось бы поверх лисы. Это позволяет нам управлять размещением уровня, в котором содержится лиса, относительно уровня с яблоками. Лисе отведен уровень 999.999. Яблоки будут помешаться начиная со слоя 1 и, следовательно, будут располагаться под лисой.

function initGame() {
    // Инициализация переменных, хранящих
    // номера первого и последнего яблока.
    firstApple = 1;
    lastApple = 0;
    // Инициализация переменной, хранящей число пойманных яблок,
    score = 0;
    // Указываем общее количество яблок.
    totalApples = 20;
    // Скорость падения и счетчик времени
    // между появлениями яблок.
    timeSinceLastApple = 0;
    appleSpeed = 5;
    // Создаем экземпляр клипа содержащий лису,
    attachMovie("running fox", "fox", 999999);
    fox._x = 275;
    fox._y = 300;
}

Для того чтобы переместить лису, объект Key должен проверить состояние клавиатуры. С помощью функций Key.isDown (Key.RIGHT) и Key.isDown (Key.LEFT) проверяется, нажаты ли стрелки "вправо" и "влево" соответственно. Переменная dx принимает значение от 10 до – 10 и показывает насколько и в каком направлении должна переместиться лиса.

Функция Key.is Down () определяет, удерживается ли определенная клавиша в данный момент. Она особенно полезна в играх, где управление осуществляется при помощи клавиатуры. Для задания клавиши используется ее код. Помимо номеров, например 65 для буквы "А", для задания специальных клавиш, таких как стрелка "вверх", могут использоваться константы, в данном случае Key.UP. Коды клавиш приведены в приложении В справочного руководства по ActionScript Flash MX.

Кроме переменной dx, функция задает переменную _xscale клипа лисы. Действительное значение _xscale остается неизменным, но может быть либо отрицательным, либо положительным. В зависимости от этого клип поворачивается, и лиса начинает двигаться в том или ином направлении.

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