Астероиды
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 может попробовать свои силы и применить все имеющиеся знания. Чем разнообразнее игра, тем лучше.
