Астероиды
Создание кода
Как и в игре "Космический бой", за пределами рабочего поля находятся клип "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; }