Иллюстрированный самоучитель по созданию Flash-игр

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.