91824841

в данный момент. Она особенно


Функция Key. is Down () определяет, удерживается ли определенная клавиша в данный момент. Она особенно полезна в играх, где управление осуществляется при помощи клавиатуры. Для задания клавиши используется ее код. Помимо номеров, например 65 для буквы «А», для задания специальных клавиш, таких как стрелка "вверх", могут использоваться константы, в данном случае Key.UP. Коды клавиш приведены в приложении В справочного руководства по ActionScript Flash MX.

Кроме переменной dx, функция задает переменную _xscale клипа лисы. Действительное значение _xscale остается неизменным, но может быть либо отрицательным, либо положительным. В зависимости от этого клип поворачивается, и лиса начинает двигаться в том или ином направлении.
После задания переменной dx клип лисы перемешается на расстояние, соответствующее указанной величине. Затем проверяется, совпадает ли новое положение с левой и правой границами экрана.
Если движение лисы продолжается, а клип лисы неподвижен, задается его переход к кадру "run", чтобы создать впечатление бегущей лисы. С другой стороны, если лиса не двигается, но в то же время и не находится в кадре 1, задается переход клипа к этому кадру, и создается впечатление, будто лиса стоит.

function moveFox() {

// Проверяем, нажаты ли клавиши со стрелками,

if (Key.isDown(Key.RIGHT)) {

dx = 10;

// Поворачиваем лису направо.

fox._xscale = -Math.abs(fox._xscale);

}

else if (Key.isDown(Key.LEFT)) {

dx = -10;

// Поворачиваем лису налево.

fox._xscale = Math.abs(fox._xscale);

} else {

// He двигаемся.

dx = 0;

// Передвигаем лису.

fox._x += dx;



if (fox._x < 30) fox._x = 30;

if (fox._x > 520) fox._x = 520;

// Меняем поведение лисы (стоит или бежит).

if ((dx != 0) and (fox._currentFrame ==1)) {

fox.gotoAndPlay ("run") ;

} else if ((dx == 0) and (fox._currentFrame != 1)) {

fox.gotoAndPlay ("stand");

}
}

Один раз в каждом кадре вызывается функция dropNewapple. Необходимость создания нового яблока определяется тремя вложенными условными выражениями.
Прежде всего проверяется переменная timeSinceLastapple. Условие выполняется только в случае, если ее значение больше 20. Переменная увеличивается на 1 в конце функции.
В следующей проверке определяется, соответствует ли количество упавших яблок общему количеству яблок, которое должно быть сброшено.
Наконец, функция Math.random() задает 10-процентную вероятность того, что яблоко упадет. В результате интервал между падениями двух яблок будет всегда разным.
Для создания нового клипа яблока используется функция attachMovie. Горизонтальное положение ролика выбирается в диапазоне между 30 и 520. Каждый раз при создании нового яблока значение переменной appleSpeed увеличивается.



_root["apple"+lastApple]._x = Math.random()*490+30;

_root["apple"+lastApple]._y = 0;

// Сбрасываем счетчик времени ожидания.

timeSinceLastApple = 0;

// Увеличиваем скорость падения яблока
if (appleSpeed < 10) appleSpeed += .5;

}

}

}

// Если не бросили яблоко, приближаем это событие.
timeSinceLastApple++;

}

Функция dropNewApple создает переменную type для каждого клипа. Хотя данные клипы не имеют внутри себя сценария, для них можно определять переменные. Поэтому переменная type для гласных звуков будет иметь значение "good", для согласных- bad". Данная переменная проверяется в функции moveApples, когда игрок ловит яблоко. Таким образом, можно определить, поймал ли игрок хорошее яблоко или плохое.

function moveApples() {
// Проверяем все летящие яблоки.
for (i = f irstApple,- i // Определяем местоположение яблока.
х = _root["apple"+i]._x;
у = _root["apple"+i]._y + appleSpeed;
// Выясняем, достигло ли яблоко земли,
if (у > 400) { removeApple(i);
// Попало ли в яблоко корзину?
} else if ((Math.abs(y-fox._y) < 10) and (Math.abs(x-fox._x) < 25))
{ if (_root["apple"+ij.type == "good") {
// Если яблоко хорошее, увеличиваем очки,
score += -1;
} else {
// Если плохое - уменьшаем.
score -= 1;
// Проверяем, чтобы количество очков
//не было отрицательным числом,
if (score < 0) score = 0;
}
removeApple(i) ;
// Продолжаем перемещать яблоко.
} else {
_root["apple"+i]._y = y;
}}}


Функция removeApple аналогична соответствующей функции в игрe "Поймай яблоко".



if (fox._x < 150) fox._x = 150;

if (fox._x > 400) fox._x = 400;

// Увеличиваем скорость движения байдарки

if (riverSpeed < 20) riverSpeed += .5;

}

Скорость игры увеличивается с помощью функции moveFox, в результате байдарка постепенно набирает скорость.
Функция newRock аналогична функции dropNewApplet предыдущей игры и даже немного проще, поскольку при появлении камня выбор ограничен только одним клипом.

function newRock() {

// Проверяем, прошло ли достаточно времени,

if (timeSinceLastRock > 5) {

// Проверяем, превышено ли максимальное число камней

if (lastRock < totalRocks) {

// Новая скала появляется с вероятностью 10%

if (Math.random() < .1) {

// Создаем новую скалу

lastRock++;

attachMovie( "rocks", "rock"+lastRock, lastRock );
_root["rock"+lastRock]._x = Math.random()*250+150;

_root["rock"+lastRock]._y = 450;

// Решаем, какой кадр показать.

f = int(Math.Random()*_root["rock"+lastRock]._totalFrames) + 1;

_root["rock"+lastRock].gotoAndStop(f);

// Сбрасываем счетчик времени

//до появления следующего камня.

timeSinceLastRock = 0;

// Запоминаем, что с новым камнем

// столкновений не было.

_root["rock"+i].hit = false;

}

} }

// Уменьшаем время до появления следующего камня

timeSinceLastRock++;

}

Обратите внимание, что для каждого нового камня переменная hit принимает значение false. Это обозначает, что байдарка ни разу не столкнулась с данным камнем. Это условие проверяется функцией moveRock перед тем, как разрешить столкновение. В случае столкновения переменная hit соответствующего клипа принимает значение true и второй раз удариться об этот камень байдарка уже не может.
Обратите внимание, что по сравнению с игрой "Поймай яблоко" меняются и координаты области попадания (столкновения). Столкновение может произойти в области с размерами 60 пикселов по горизонтали и 25 пикселов по вертикали в обе стороны от центра. Эта область примерно соответствует форме байдарки (9.8).



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;

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

_у. 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, и машина замирает на месте.


Содержание раздела