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

Гонки

Подготовка ролика

Фон и линии, обозначающие границы дороги, – неподвижные элементы. Но для камней и звездообразных меток нужны клипы. Клип центральной линии – это просто линия, но расположенная таким образом, чтобы центральная точка клипа была на вершине линии.

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

Клипы камней и бонусных меток должны быть помещены под нижней границей экрана и названы "SideObject" и "bonus". Клип машины следует поместить внизу экрана и назвать "саг". Кроме того, слева находится клип "actions". Во всех четырех клипах содержатся сценарии. На экране должны быть два динамических текстовых поля: "timeDisplay" и "score". Они оба должны быть привязаны к переменным с такими же именами.

В ролике-примере я обозначил вводный кадр как кадр 1, таким образом, все действие начинается с кадра 2. Есть еше третий кадр с меткой "game over".

Создание кода

Основная часть кода – это сценарий клипа машины. Он начинается с задания переменной speed значения 0. Эта переменная должна быть на уровне _root, поскольку остальные клипы будут к ней обращаться.

onClipEvent(load) {
    // Инициализируем переменную скорости.
    _root.speed = 0;
}

Обработчик onClipEvent (enterFrame) сначала проверяет все четыре клавиши с изображением стрелок. Левая и правая клавиши со стрелкой перемешают машину влево или вправо и также заставляют клип с машиной показывать соответствующий кадр поворота.

Клавиши со стрелками вверх и вниз изменяют скорость машины на 0.1. Постоянно осуществляется проверка, не упала ли скорость ниже 0.

Если ни одна из клавиш со стрелками не нажата, клип с машиной возвращается к первому кадру. Обработчик осуществляет еще две проверки. Первая нужна, чтобы узнать, не находится ли под машиной клип "bonus". Если да, игрок получает очки, и бонус очень быстро проезжает далее, чтобы игрок не получил за него очки еще раз.

Вторая проверка выясняет, не коснулась ли машина обочины. Если да, движение машины в сторону ограничивается и замедляется.

onClipEvent(enterFrame) {
    if (Key.isDown(Key.LEFT)) {
        // Поворачиваем влево.
        this._x -= 10;
        this.gotoAndStop("left");
    }
    else if (Key.isDown(Key.RIGHT)) {
        // Поворачиваем вправо.
        this._x += 15;
        this.gotoAndStop("right");
    }
    else if (Key.isDown(Key.UP)) {
        // Увеличиваем скорость.
        _root.speed += 0.1;
    }
    else if (Key.isDown(Key.DOWN)) {
        // Тормозим.
        _root.speed -= 0.1;
        // Проверяем, что скорость не меньше 0.
        if (_root.speed < 0)
            _root.speed = 0;
    }
    else {
        _root.car.gotoAndStop("straight");
        // Проверяем бонус.
        if (this.hitTest(_root.bonus._x, _root.bonus._y)) {
            _root.score++;
            _root.bonus._y += 100;
            // Замедляем движение, если коснулись обочины,
            if (this._x < 80) {
                this._x = 80;
                _root.speed /= 2;
            }
            else if (this._x > 470) {
                this._x = 470;
                _root.speed /= 2;
            }
        }
    }
}

Клип "sideObject" содержит сценарий, двигающий объект вниз и в сторону от центра. Для каждого следующего кадра значение _у увеличивается, а _х – изменяется. Оба параметра используют переменную speed для характеристики этого изменения, но _х использует коэффициент dx который может быть равен 1 или – 1. Объект перемешается соответственно вправо или влево.

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