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