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

Шарики-захватчики

Функция createBalloons создает 30 шариков в 10 колонках по 3 штуки в каждой. Каждая ссылка на шарик хранится в массиве. Цвет шарику назначается в зависимости от того, в каком он ряду. Каждому шарику придано начальное направление и скорость равная 3.

function createBalloons() {
    balloons = new Array();
    balloonNum = 0;
    // Создаем новый ряд.
    for (var y = 0; y < 3; y++) {
        for (var x = 0; x < 10; x++) {
            // Создаем и размещаем новый шарик.
            attachMovie("balloon", "balloon" + balloonNum, balloonNum);
            balloonClip = this["balloon" + balloonNum];
            balloonClip._x = x * 30 + 20;
            balloonClip._y = y * 30 + 20;
            // Добавляем в массив,
            balloons, push(balloonClip);
            // Устанавливаем цвет.
            balloonColor = new Color(balloonClip);
            if (y == 0) {
                balloonColor.setTransform({
                    rb: 255
                });
            }
            else if (y == 1) {
                balloonColor.setTransform({
                    gb: 255
                });
            }
            else if (y == 2) {
                balloonColor.setTransform({
                    bb: 255
                });
                balloonNum++;
            }
        }
        // Направление (скорость) шариков.
        balloonDirection = 3;
    }
}

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

function moveBalloons() {
    // Переменная-флаг изменения направления,
    var newDirection = false;
    // Просматриваем все шарики,
    for (var i = 0; i < baloon.ltngth; i++) {
        // Передвигаем текущий шарик,
        balloons[i]._x += balloonDirection;
        // Смотрим, не достиг ли шарик границы экрана.
        if ((balloonDirection > 0) and (balloons[i]._x > 530)) {
            newDirection = true;
        }
        else if ((balloonDirection < 0) and (balloons[i]._x < 20))
            newDirection = true;
        // При столкновении с границой экрана
        // шарики опускаются и меняют направление.
        if (newDirection) {
            balloonDirection *= -1;
            for (var i = 0; i < baloon.ltngth; i++) {
                balloons[i]._y += 3;
                //Не достигли ли шарики земли?
                if (balloons[i - 1], _y > 300) {
                    gotoAndStop("game over");
                }
            }
        }
    }
}

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

function checkCollision(bullet) {
    // Просматриваем все шарики,
    for (j = balloons.length - 1; j >= 0; j -) {
        balloon = balloons[j];
        // Смотрим не попала ли пуля в шарик,
        if (distance(bullet, balloon) < 10) {
            // Удаляем шар из массива,
            balloons.splice(j, 1);
            // Переходим в кадр взрыва шарика,
            balloon.gotoAndPlay(2);
            // Увеличиваем счет,
            score += 1;
            // Если шаров больше нет - игра заканчивается,
            if (balloons.length == 0) {
                gotoAndStop("game over");
            }
            // Возвращаем значение true, так как попали в шарик,
            return(true);
        }
    }
    // Возвращаем false, поскольку попали в шарик,
    return(false);
}

К сведению

Как и в исходной игре этой главы, здесь есть вводный и заключительный кадры. Я в обоих играх использую одинаковые кадры вне зависимости от того, выиграл игрок или проиграл. Вы можете сделать два разных кадра с соответствующим текстом в каждом.

Другие возможности

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

Если вы хотите добавить в игру уровней, то можете создать переменную startSpeed, которая начинается со значения 3. Задайте эту скорость функции balloonDirection каждого шарика вместо жестко заданного "3". Пусть теперь после того, как все шарики выбиты, игрок переходит к экрану "level over". Когда он нажимает кнопку "play next level", startSpeed увеличивается, и ролик отправляется к кадру "play", где шарики появляются с новой, более высокой скоростью.

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