Стрельба по воздушным шарам
Перед созданием нового шара необходимо провести три проверки. Первая определяет, остались ли в игре шары, вторая – прошло ли достаточно времени после создания предыдущего шара. Последняя проверка представляет собой своего рода игру "орел и решка": новый шар создается с вероятностью 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. Благодаря этому удаление элемента не влияет на остальную часть массива. Предположим, из массива, состоящего из пяти элементов, был удален третий элемент. Тогда четвертый элемент становится третьим, а пятый – четвертым. Если бы вы считали в прямом направлении, вы бы пропустили третий элемент и сразу перешли к четвертому. При счете в обратном порядке такой проблемы не возникает.