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

Астероиды

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

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

onClipEvent(load) {
    // Устанавливаем все элементы игры.
    _root.startLevel();
}
onClipEvent(enterFrame) {
    // Перемещаем корабль на один шаг.
    _root.shipMove();
    // Перемещаем все пули на один шаг.
    _root.bulletsMove();
    // Перемещаем астероиды на один шаг.
    _root.rocksMove();
    // Выясняем, произошло ли столкновение.
    _root.checkHits();
}

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

on(keyPress "space") {
    // Выстрел.
    shipFire();
}
on(keyPress "right") {
    // Поворот на 30° вправо.
    shipTirn(30);
}
on(keyPress "left") {
    // Поворот на 30° влево.
    shipTirn(30);
}
on(keyPress "up") {
    // Перемещаем корабль вперед.
    shipThrust();
}
on(keyPress "down") {
    // Корабль останавливается.
    shipBreak();
}

Когда игрок щелкает по кнопке Play, чтобы начать игру, в кадре "start" можно установить несколько переменных: обнулить количество набранных очков, начать первый уровень игры и указать, что игрок имеет три жизни.

on(press) {
    gameLevel = 1;
    lives = 3;
    score = 0;
    gotoAndPlay("play");
}

Все функции находятся в сценарии кадра "play" основной временной шкалы. Первая функция вызывается в начале игры, а также сразу после того, как у игрока уменьшилось количество жизней.

Экземпляру клипа "ship" на рабочем поле присвоено имя "ship". В дополнение к стандартным свойствам клипа, таким как _хи_у, вы добавите несколько новых. Например, свойства dx и dy будут отражать расстояние, на которое перемещается корабль по горизонтали и вертикали соответственно.

Функция startLevel создает массивы bullets и rocks, в которых хранится список клипов пуль и астероидов.

Переменная level, используемая командой attachMovie, определяет уровень клипа, а не уровень игры, для этого применяется переменная gameLevel.

Далее для начала уровня создаются большие астероиды. На первом уровне – два астероида, на втором – три и т.д.

Потом в функции shipFire используется переменная timeOfLastFire, чтобы игрок не мог слишком часто стрелять.

function startLevel() {
    // Корабль не движется,
    ship.dx = 0.0;
    ship.dy = 0.0;
    // Создаем новые массивы,
    bullets = new Array();
    rocks = new Array();
    // Начинаем игру с нулевым уровнем клипа,
    level = 0;
    // Добавляем новые астероиды, количество которых на единицу больше значения переменной gamelevel.
    for (i = 0; i < gameLevel; i++) {
        newRock(100.0, 0);
    }
    // Можно стрелять сразу же.
    timeOfLastFire = 0;
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.