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

Луноход

В первом кадре представлен корабль без включенных ускорителей. Во втором кадре включен главный ускоритель, который поднимает корабль вверх. В третьем и четвертом кадрах отображены боковые ускорители. На рис. 16.7 показан кадр "left". Обратите внимание, что слово "left" означает, что корабль будет двигаться влево, а пламя ускорителя находится справа. Кадр "explode" представляет собой начало небольшой анимации, в которой луноход взрывается. Эта анимация используется в том случае, когда игрок посадил корабль не на площадку.

В дополнение к клипу "background", который совсем не используется в коде, три других клипа представляют собой рельеф поверхности для трех уровней игры. Эти клипы называются "Ground – level I", "Ground – level 2" и "Ground – level 3".

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

Основная временная шкала этого ролика действительно сложная. Информация о кадрах и их содержимом приведена в табл. 16.1.

Таблица 16.1. Кадры основной временной шкалы.

Кадры Содержание
start Содержит введение и кнопку Play, чтобы начать игру
start level Предупреждает игрока о начале первого уровня
level 1 В этом кадре игрок проходит первый уровень, если его корабль останется цел, ролик перейдет к следующему кадру
level1 done Если игрок благополучно закончил первый уровень, ему выдается об этом сообщение, и отображается кнопка Play, с помощью которой можно начать второй уровень
level2 В этом кадре игрок проходит второй уровень, если его корабль останется цел, ролик перейдет к следующему кадру
level2 done Если игрок благополучно закончил второй уровень, ему выдается об этом сообщение, и отображается кнопка Play, с помощью которой можно начать третий уровень
level3 В этом кадре игрок проходит третий уровень, если его корабль останется цел, ролик перейдет к следующему кадру
game over Игрока поздравляют с тем, что он три раза успешно посадил корабль. Кнопка Play предлагает попробовать сделать это еще раз
lost ship Если на каком-либо уровне корабль игрока взрывается, ролик переходит к этому кадру, и игра заканчивается. С помощью кнопки Play можно попытаться еще раз пройти игру

У вас также будет два простых клипа: "fuel gauge" и "fuel meter". Первый представляет собой пустой прямоугольник, а второй – сплошной. Клип "meter" помещается внутри клипа "gauge". Далее в коде вы укажете,чтобы при сжигании горючего размеры клипа "meter" уменьшались, то есть он будет занимать меньше места в прямоугольнике "gauge".

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

В трех кадрах "level1", "level2" и "level3" у вас будут клипы "actions", которые вызывают необходимые для игры функции. В начале уровня вызывается только одна функция, а в течение игры постоянно – другая.

onClipEvent(load) {
    _root.startLevel();
}
onClipEvent(enterFrame) {
    _root.moveShip();
}

Обе эти функции расположены в основной временной шкале первого кадра. Сценарий ролика начинается с функции startGame, которая вызывается, когда в первом кадре игрок щелкает по кнопке Play. Она устанавливает значение переменной gameLevel, отображаемое в текстовом поле в верхнем правом углу экрана. Затем с помощью функции startLevel начинается первый уровень.

function startGame() {
    gameLevel = 1;
    startLevel();
}

Функция startLevel выполняет множество задач. Сначала она переводит ролик к кадру в соответствии со значением переменной gameLevel, затем помешает корабль вверху экрана. Скорость корабля, которая определяется величинами dx и dy, обнуляется. Для увеличения скорости корабля и для того, чтобы он начал двигаться вниз, используется переменная gravity.

В массивах hitPoints и footPoints содержатся координаты некоторых точек относительно центра корабля. Для определения, коснулся ли корабль поверхности луны, используются элементы массива hitPoints. А оба элемента массива footPoints нужны, чтобы определить, находятся ли обе опоры лунохода на посадочной площадке.

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