Астероиды
function
checkHits() {
// Просматриваем все астероиды,
for
(j
=
rooks.length
-
1
; i
>
=
0
; i
-
-
) {
// Просматриваем все пули.
for
(j
=
bullets.length
-
1
; j
>
=
0
; j
-
-
) {
// Выясняем, попала ли пуля в астероид.
if
(rocks[i].hitTest(bullets[j]._x, bullets[j]._y,
true
)) {
// Удаляем пулю.
bullets[j].removeMovieClip();
bullets.splice(j);
// Опредляем размер и положение новых астероидов.
newsize
=
rocks[i]._xscale
/
2
;
x
=
rocks[i]._x;
y
=
rocks[j]._y;
// Удаляем астероид.
rocks[i].removeMovieClip();
rocks.splice(i,
1
);
// Создаем на этом месте два новых астероида,
if
(newsize
>
=
25
) {
newRock(mewsize, x, y);
newRock(mewsize, x, y);
}
// Увеличиваем количество очков .score++;
// Больше не нужно проверять, попала ли пуля в какой-нибудь астероид.
break
;
}
}
// Определяем, столкнулся ли корабль с астероидом,
if
(rocks[i].hittest(ship._x, ship._y,
true
)) {
// Выясняем, остались ли еще жизни,
if
(lives
<
1
) {
removeAll();
gotoAndPlay(
"game.over"
);
// Жизнь еще осталась, уменьшаем количество жизней на единицу.
}
else
{
removeAll();
lives
-
-
;
gotoAndPlay(
"ship hit"
);
}
}
}
// Проверяем, остались ли еще астероиды,
if
(rocks.length
=
=
0
) {
removeAll();
gotoAndPlay(
"level over"
);
gameLevel
+
+
;
}
}
Функция removeAll используется непосредственно перед функцией checkHits, которая переводит ролик к следующему кадру. С экрана удаляются все астероиды и пули, чтоб они не заслоняли текст последующих кадров.
function
removeAll() {
// Удаляем все клипы пуль,
for
(i
=
0
; i
<
bullets.length; i
+
+
) {
bullets[i].removeMovieClip();
}
// Удаляем все клипы астероидов.
for
(i
=
0
; i
<
rocks.length; i
+
+
) {
rocks[i].removeMovieClip();
}
}
К сведению
Как всегда, убедитесь, что для клипов в библиотеке установлены свойства связи, чтобы они были включены в swf-файл. Свойства связи необходимо установить для астероидов и пуль, потому что до начала игры их нет на рабочем поле.
Я также создал три текстовых поля, отображающих значения переменных gameLevel, lives и score. Эти поля расположены в разных углах экрана, над ними добавлен поясняющий текст.
Другие возможности
В таких играх, как "Астероид", можно придумать много интересного. Например, время от времени вокруг корабля может летать небольшой НЛО; если игрок его собьет, то заработает дополнительные очки. Зачастую корабль оснащен щитом, который защищает его от определенного количества столкновений. Функция "Гиперпространство" переносит корабль в произвольную точку экрана, а "бомба" взрывает все астероиды, находящиеся на заданном расстоянии от корабля.
Это превосходная игра, в которой начинающий программист ActionScrip может попробовать свои силы и применить все имеющиеся знания. Чем разнообразнее игра, тем лучше.