Вход/Регистрация
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
вернуться

Розенцвейг Гэри

Шрифт:

На экране должны быть два динамических текстовых поля: "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 += .1;

} else if (Key.isDown(Key.DOWN)) {

// Тормозим.

_root.speed -= .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» содержит сценарий, двигающий объект вниз и в сторону от центра. Для каждого следующего кадра значение _y увеличивается, а _x – изменяется. Оба параметра используют переменную speed для характеристики этого изменения, но _х использует коэффициент dx, который может быть равен 1 или -1. Объект перемещается соответственно вправо или влево.

Когда объект достигает значения 600 по вертикали, что на 200 пикселов ниже границы экрана, он возвращается назад к значению 200, то есть вновь появляется на горизонте. С вероятностью 50/50 он помещается слева или справа от дороги. Именно в этот момент определяется значение переменной dx.

И наконец, масштаб объекта определяется в соответствии со значением _y. Это означает, что объект становится больше по мере приближения.

onClipEvent(enterFrame) {

// Движемся вниз.

this._y += _root.speed;

// Движемся в стороны.

this._x += dx*_root.speed;

// Возвращаем объект на исходную озицию, если он проехал за

// нижнюю границу экрана.

if (this._y > 600) {

this._y = 200;

if (Math.random < .5) {

// Объект слева.

this._x = Math.random*170;

dx = -1;

} else {

// Объект справа.

this._x = 550-Math.random*170;

dx = 1;

}

}

// Задаем масштаб в соответствие со значением _y.

this._xscale = this._y/4;

this._yscale = this._y/4;

}

Обратите внимание, что клип «sideObject» не взаимодействует с машиной. Это делает только клип «bonus». Но объекты по сторонам дороги направляют взгляд игрока так, что создается ощущение глубины. Центральная линия движется, как и камни, но, поскольку она находится в центре экрана, она не передвигается ни вправо, ни влево. Она просто движется вниз и изменяет масштаб.

onClipEvent(enterFrame) {

// Движемся вниз.

this._y += _root.speed;

// Возвращаемся к горизонту.

if (this._y > 400) {

this._y = 200;

}

// Устанавливаем масштаб.

this._xscale = this._y/4;

this._yscale = this._y/4;

}

Бонусные звезды ведут себя более похоже на объекты по сторонам. Однако они не появляются где попало. Они появляются с равной вероятностью в одном из двух мест на дороге. Таким образом, двигаясь вниз по экрану, бонусная звезда движется в сторону со скоростью вполовину меньшей, чем вниз. Это позволяет создавать более точную перспективу, поскольку звезды находятся ближе к центру дороги.

onClipEvent(enterFrame) {

// Движемся вниз.

this._y += _root.speed;

this._x += dx*_root.speed;

// Возвращаемся к горизонту.

if (this._y > 600) {

this._y = 200;

if (Math.random < .5) {

// Переходим на левую сторону дороги.

this._x = 250;

dx = -.5;

} else {

// Переходим на правую сторону дороги.

this._x = 300;

dx = .5;

}

}

// Устанавливаем масштаб в соответствии с вертикальным

// положением.

this._xscale = this._y/4;

this._yscale = this._y/4;

}

Клип «actions» расположен вне экрана и содержит игровые часы. Он замечает время начала и производит обратный счет до 0. В клипе-примере игра очень короткая, всего 15 секунд. Вы можете увеличить ее до минуты или двух. Когда обратный отсчет доходит до 0, главная временная шкала отправляется к кадру "game over". Параметр speed становится равным 0, и машина замирает на месте.

onClipEvent(load) {

// Рассчитываем время окончания игры.

endTime = getTimer+15000;

}

onClipEvent(enterFrame) {

// Подсчитываем, сколько времени прошло.

timeLeft = (endTime – getTimer)/1000;

// Конец игры.

if (timeLeft <= 0) {

_root.speed = 0;

_root.timeDisplay = "0";

_root.gotoAndStop("game over");

} else {

// Отображаем оставшееся время.

_root.timeDisplay = timeLeft;

}

}

  • Читать дальше
  • 1
  • ...
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: