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

Бита и блоки

function checkCollisions() {
    // Определяем границы мяча. 
    ballTop = ball._y - ball._height / 2;
    ballBottom = ball._y + ball._height / 2;
    ballLeft = ball._x - ball._width / 2;
    ballRight = ball._x + ball._width / 2;
    // Допускаем, что уровень пройден,
    leveldone = true;
    // Выясняем, ударил ли мяч по блоку,
    for (i = l; i < = 55; i + +) {
        brick = _root["a" + i];
        // Проверяем, есть ли еще блоки вокруг,
        if (brick._x < > -1000) {
            if (brickHit(brick)) {
                // Если по блоку ударили,
                // его нужно удалить с экрана.
                brick._x = -1000;
                // Изменяем направление движения мяча,
                dy *= -1;
            }
            else {
                // Блоки еще остались, так что уровень
                //не закончен,
                leveldone = false;
            }
        }
    }
    // Все ли блоки уже выбиты?
    if (leveldone) {
        // Начать новый уровень.
        Mouse.show();
        gotoAndPlay("start level");
        // Увеличиваем скорость движения мяча по вертикали.
        dy += 1;
        if (dy > 7)
            dy = 7;
    }
}

Обратите внимание, что в функции hitBrick находятся четыре вложенных оператора if. Возможно, вам будет интересно, почему не написать четыре условия в линию, соединив их оператором AND. Дело в скорости. С вложенными операторами if, если одно из условий оказалось ложным, программа не будет проверять остальные. Таким образом, значительно сократится объем работы, которую выполняет программа, и скорость игры увеличится. С операторами AND программе Flash придется проверять все четыре условия, даже если первое из них ложное.

Функция hitBrick проверяет все четыре стороны мяча по отношению ко всем четырем сторонам блока, чтобы узнать, перекрывает ли мяч один из них. Функция возвращает значение либо true, либо false.

function brickHit(brick) {
    // Проверяем, попал ли мяч по блоку.
    if (ballTop <= brick._y + brick._height / 2) {
        if (ballBottom >= brick._y - brick._height / 2) {
            if (ballRight >= brick._x - brick._width / 2) {
                if (ballLeft <= brick._x + brick._width / 2) {
                    // Все условия верны, то есть мяч
                    // столкнулся с блоком,
                    return(true);
                }
            }
        }
    }
    // Мяч не столкнулся с блоком,
    return(false);
}

К сведению

Для работы кода необходимо точно указать множество элементов. Запустите ролик Paddlebricks.fla, чтобы посмотреть готовый вариант программы в действии. Для создания своей собственной версии необходимо запомнить имена всех клипов и в каждый кадр вставить команду stop. Также нужно вставить небольшие фрагменты кода в кнопки и первый кадр.

Ряды блоков были раскрашены с помощью эффекта Tint (Окраска), благодаря чему игра стала визуально более интересной. Вы можете выбрать другое графическое решение, ничего не меняя в функциональной части игры.

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

Игра станет интереснее, если в ней будет подсчет очков. Здесь это не сделано для того, чтобы не усложнять код. Просто добавьте текстовое поле "score" и свяжите его с переменной score. Затем прибавляйте единицу каждый раз, когда игрок выбивает блок.

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

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