Стрельба по воздушным шарам
Перед созданием нового шара необходимо провести три проверки. Первая определяет, остались ли в игре шары, вторая – прошло ли достаточно времени после создания предыдущего шара. Последняя проверка представляет собой своего рода игру "орел и решка": новый шар создается с вероятностью 50%.
После завершения проверок функция newBalloon создает новый шар с 50-процентной возможностью появления шара с левой или правой стороны. Скорость шара принимает произвольное значение от 3 до 5. Число является положительным, если шар будет пролетать слева направо и отрицательным в противном случае.
Цвет нового шара выбирается из пяти возможных оттенков. Для задания цвета используется функция setTransform.
Клипы шаров можно упорядочить, поместив их имена и значения скоростей в массив balloons.
Затем задаются переменные nextBalloon и nextBalloonTime, при помощи которых осуществляется обращение к переменной newBalloon.
function newBalloon() { // Определяем, могут ли появиться новые шары, if (nextBalloon // Проверяем, пришло ли достаточно времени // после появления последнего шара, if (getTimer() > nextBalloonTime) { // "Бросаем монетку", if (Math.Random() < 0.5) { "balloon" + nextBalloon, // Создаем новый шар. attachMovie("balloon", nextBalloon); // Выбираем, с какой стороны // и с какой скоростью полетит шар. if (Math.Random() < 0.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++; nextBalloonTime = getTimerf) + 2000; } } } }Созданные шары перемещаются на определенное расстояние с помощью функции moveBalloons. Если шар достиг противоположной границы рабочего поля, его клип удаляется. Соответствующий элемент также удаляется из массива balloons.
Чтобы быстро задать 50-процентную вероятность, лучше использовать фрагмент кода (Math. Random () <. 5). Функция Math.Random () всегда принимает значение от 0 до 1.0 и никогда не бывает равна 1.0, поэтому условие <.5 дает 50-процентную вероятность возникновения некоторого события.
Имейте в виду, что в цикле for функции moveBalloons перечисление осуществляется в обратном порядке: начинается с последнего элемента в массиве balloons и заканчивается 0. Благодаря этому удаление элемента не влияет на остальную часть массива. Предположим, из массива, состоящего из пяти элементов, был удален третий элемент. Тогда четвертый элемент становится третьим, а пятый – четвертым. Если бы вы считали в прямом направлении, вы бы пропустили третий элемент и сразу перешли к четвертому. При счете в обратном порядке такой проблемы не возникает.
