Стрельба по воздушным шарам

We use cookies. Read the Privacy and Cookie Policy

Стрельба по воздушным шарам

Исходный файл: Balloonshoot.fla

Первая игра состоит из трех основных элементов: лисы, воздушных шаров и снарядов. В нашем примере лиса стреляет всего лишь горошинами из соломинки (рис. 10.1). Поэтому игра подойдет для любой аудитории.

Рисунок 10.1. Лиса стреляет по пролетающим воздушным шарам из соломинки

Задача проекта

Задача этого проекта – создать игру, в которой лиса перемещается влево и вправо и стреляет вверх по воздушным шарам. Шары появляются слева и справа, на разной высоте и летят с разной скоростью. После того как пролетит определенное количество шаров, игра заканчивается. Счет определяется количеством лопнувших шаров. Готовую игру можно просмотреть на Web-сайте (ролик Balloonshoot.fla).

Подход

Лиса перемещается так же, как и во всех играх предыдущей главы. Перемещение лисы будет анимированным, направление движения задается горизонтальным поворотом.

Воздушные шары будут созданы как копии одного клипа, представляющего собой светло-серый воздушный шар. Подобно высоте, скорости и направлению, цвет будет произвольным.

Снаряды, которыми стреляет лиса, создаются из другого клипа. Выстрел будет производиться при нажатии на клавишу пробела. На кончике соломинки создается новый клип, перемещающийся вверх. Также будет создан таймер, дающий игроку возможность делать только один выстрел в секунду.

При достаточном приближении снаряда к шару шар лопается. Столкновение будет определяться не функцией hitTest, а формулой, определяющей, насколько снаряд приблизился к центру воздушного шара.

Подготовка ролика

В ролике Balloonshoot.fla клип лисы содержит кадр с меткой «stand» и анимационную последовательность, помеченную «walk». Анимация изображает лису, перемещающуюся влево (рис. 10.2), однако при помощи Action-Script вы можете повернуть лису в другую сторону, не создавая отдельной анимации. Главное условие: соломинка должна занимать во всех кадрах одно и то же положение относительно центральной точки клипа.

Рисунок 10.2. Лиса идет влево и всегда готова выстрелить из соломинки

Клип, соответствующий воздушному шару, также состоит из нескольких кадров. Первый кадр содержит изображение обычного шара. Остальные кадры воспроизводят анимацию лопающегося шара. Воспроизведение этой короткой анимации задается при попадании в шар. На рис. 10.3 показан единственный кадр анимации ролика, возможно, вы захотите изобразить взрыв более подробно.

Рисунок 10.3. При попадании в шар запускается воспроизведение анимации взрыва

Для окраски шара используются оттенки серого цвета. Цвет задается одновременно с созданием нового клипа шара. В результате один клип шара каждый раз принимает новый оттенок.

Клип снаряда содержит короткую линию. Хотя в качестве снаряда используется горошина, вертикальная линия создает видимость движения вверх.

Создание кода

Небольшой клип «actions» помещается за пределами рабочего поля и контролирует процесс игры путем обращения к функциям главной временной шкалы. Она запускает игру при загрузке и вызывает ряд функций в каждом кадре.

onClipEvent(load) {

_root.initGame();

}

onClipEvent(enterFrame) {

_root.newBalloon() ;

_root.moveBalloons() ;

_root.moveFox();

_root.moveBullets();

}

Функция initGame задает все основные переменные, используемые в игре.

function initGame() {

// Инициализируем переменные, связанные с объектами-шарами.

nextBalloonTime = 0;

nextBalloon = 0;

balloons = [];

numBalloons = 10;

// Инициализируем переменные, связанные с объектом-пулей.

nextBulletTime = 0;

nextBullet = 0;

bullets = [];

// Количество очков равно 0.

score = 0;

}

Перед созданием нового шара необходимо провести три проверки. Первая определяет, остались ли в игре шары, вторая – прошло ли достаточно времени после создания предыдущего шара. Последняя проверка представляет собой своего рода игру орел и решка: новый шар создается с вероятностью 50 %.

После завершения проверок функция newBalloon создает новый шар с 50-процентной возможностью появления шара с левой или правой стороны. Скорость шара принимает произвольное значение от 3 до 5. Число является положительным, если шар будет пролетать слева направо и отрицательным в противном случае.

Цвет нового шара выбирается из пяти возможных оттенков. Для задания цвета используется функция setTransform.

Клипы шаров можно упорядочить, поместив их имена и значения скоростей в массив balloons.

Затем задаются переменные nextBallon и nextBalloonTime, при помощи которых осуществляется обращение к переменной newBalloon.

function newBalloon () {

// Определяем, могут ли появиться новые шары.

if (nextBalloon < numBalloons) {

// Проверяем, пришло ли достаточно времени

// после появления последнего шара.

if (getTimer() > nextBalloonTime) {

// "Бросаем монетку".

if (Math.Random()<.5) {

// Создаем новый шар.

attachMovie("balloon", "balloon"+nextBalloon,

nextBalloon);

// Выбираем, с какой стороны

// и с какой скоростью полетит шар.

if (Math.Random()<.5) {

_root["balloon"+nextBalloon]._x = -30;

dx = int(Math.Random()*3)+3;

} else {

_root["balloon"+nextBalloon]._x = 580;

dx = -int(Math.Random()*3)-3;

}

// Выбираем высоту.

_root["balloon"+nextBalloon]._y =

int(Math.Random()*100)+20;

// Выбираем цвет.

balloonColor = new Color("balloon"+nextBalloon);

r = int(Math.Random()*5)+1;

if (r == 1) {

balloonColor.setTransform({rb:255}) ;

} else if (r == 2) {

balloonColor.setTransform({gb:255}) ;

} else if (r == 3) {

balloonColor.setTransform({bb:255}) ;

} else if (r == 4) {

balloonColor.setTransform({rb:255,gb:255});

} else if (r == 5) {

balloonColor.setTransform({rb:255,bb:255});

}

// Добавляем новый шар.

balloons.push({clip:"balloon"+nextBalloon,d:dx});

// Изменяем значение переменных. nextBalloon++;

nextBalloon++;

nextBalloonTime = getTimer() + 2000;

}

}

}

}

Созданные шары перемещаются на определенное расстояние с помощью функции moveBalloons. Если шар достиг противоположной границы рабочего поля, его клип удаляется. Соответствующий элемент также удаляется из массива balloons.

Данный текст является ознакомительным фрагментом.