Перемещаем астероид по вертикали и,
// Перемещаем астероид по вертикали и, если нужно,
// на противоположную сторону экрана.
rocks[i]._y += rocks[i].dy;
if (rocks[i]._y > 400) rocks[i]._y -= 400;
if (rocks[i] ._y < 0) rocks [i].__y += 400;
// Вращаем астероид.
rocks[i]._rotation += rocks[i].spin;
}}
Для простоты код, определяющий столкновения, был помешен в одну функцию, которая просматривает все астероиды и пули и с помощью команды hitTest проверяет, попала ли пуля в один из астероидов.
Когда пуля попадает в астероид, его размер и положения записываются, а сам астероид удаляется. Если размер астероида превышал 25%, в этой же точке создается два новых астероида, каждый из которых в два раза меньше своего предшественника. Направление движения и вращения каждого астероида выбирается случайным образом.
Функция checkHits также проверяет, не столкнулся ли какой-либо астероид с кораблем, если да, то уменьшается количество жизней, и ролик переходит к кадру "ship hit". Если не осталось ни одной жизни, то -к кадру "game over".
И в конце функция checkHits проверяет, остались ли элементы в массиве rocks. Если нет, значит, игрок разрушил все астероиды, и ролик переходит к кадру "level over".
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;
у = rocks[j]._y;
// Удаляем астероид.
rocks[i].removeMovieClip();
rocks.splice(i,1);
// Создаем на этом месте два новых астероида,
if (newsize >= 25) {
newRock(mewsize,x,y);
newRock(mewsize,x,y);}
// Увеличиваем количество очков. score++;
// Больше не нужно проверять, попала ли пуля
//в какой-нибудь астероид.
break;}}
// Определяем, столкнулся ли корабль с астероидом,