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;
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[i].removeMovieClip();
}
// Удаляем все клипы астероидов.
for (i=0; i
rocks[i].removeMovieClip();
}
}
К сведению
Как всегда, убедитесь, что для клипов в библиотеке установлены свойства связи, чтобы они были вкдючены в swf-файл. Свойства связи необходимо установить для астероидов и пуль, потому что до начала игры их нет на рабочем поле.
Я также создал три текстовых поля, отображаюших значения переменных gameLevel, livesи score.Эти поля расположены в разных углах экрана, над ними добавлен поясняюший текст.
Другие возможности
В таких играх, как «Астероид», можно придумать много интересного. Например, время от времени вокруг корабля может летать небольшой НЛО; если игрок его собьет, то заработает дополнительные очки. Зачастую корабль оснашен шитом, который зашишает его от определенного количества столкновений. Функция «Гиперпространство» переносит корабль в произвольную точку экрана, а «бомба» взрывает все астероиды, находящиеся на заданном расстоянии от корабля.
Это превосходная игра, в которой начинаюший программист ActionScript может попробовать свои силы и применить все имеюшиеся знания. Чем разнообразнее игра, тем лучше.
Исходный файл: Mazechase.fla
Следуюшая игра – "Погоня в лабиринте" – классическая аркадная игра. Самое известное воплошение этой игры – Pac-Man.
В игре, фрагмент которой изображен на рис. 16.4, лиса бегает в лабиринте, пытаясь съесть все ягоды. Там же бегает злой кролик. Лиса должна не столкнуться с кроликом, пока не соберет все ягоды.
Рисунок 16.4. Лиса пытается собрать все ягоды, в то время как кролик стремится ее догнать
Задача проекта
Игра, приведенная в качестве примера, имеет самые важные отличительные черты игры-погони в лабиринте. Ягоды исчезают с экрана, если лиса проходит через место, где они находятся. Лиса может переместиться с одной стороны экрана на другую, войдя в туннель справа или слева. Если кролик догонит лису, то она теряет одну жизнь.
Подготовка ролика
В ролике Mazechase.fla всего лишь несколько библиотечных эталонов, основными из которых являются фон, лиса, кролик и ягода.
Читать дальше
Конец ознакомительного отрывка
Купить книгу