Рисунок 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.
...
Примечание
Чтобы быстро задать 50-процентную вероятность, лучше использовать фрагмент кода (Math.Random() <.5). Функция Math.Random() всегда принимает значение от 0 до 1,0 и никогда не бывает равна 1,0, поэтому условие <.5 дает 50-процентную вероятность возникновения некоторого события.
...
Совет
Имейте в виду, что в цикле for функции moveBalloonsперечисление осуществляется в обратном порядке: начинается с последнего элемента в массиве balloonsи заканчивается 0. Благодаря этому удаление элемента не влияет на остальную часть массива. Предположим, из массива, состоящего из пяти элементов, был удален третий элемент. Тогда четвертый элемент становится третьим, а пятый – четвертым. Если бы вы считали в прямом направлении, вы бы пропустили третий элемент и сразу перешли к четвертому. При счете в обратном порядке такой проблемы не возникает.
Читать дальше
Конец ознакомительного отрывка
Купить книгу