Сплав на байдарке
Как и в предыдущих примерах, функция moveFox определяет, нажаты ли клавиши со стрелками "влево" и "вправо". Кроме этого, она проверяет, воспроизводится ли анимация "spill", и если ответ положительный, игнорирует нажатие клавиш.
Вместо поворота изображения код задает переход клипа "fox" к кадрам, помеченным "left" или "right". Первый кадр имеет метку "still" и отображает байдарку, плывущую вперед.
function
moveFox() {
if
(fox._currentFrame
>
4
) {
//Во время столкновения нажатие клавиш игнорируется.
dx
=
0
;
}
else
if
(Key.isDown(Key.RIGHT)) {
// Передвигаем лису вправо.
dx
=
riverSpeed;
fox.gotoAndStop(
"left"
);
}
else
if
(Key.isDown(Key.LEFT)) {
// Передвигаем лису влево dx = - riverSpeed;
fox.gotoAndStop(
"right"
);
}
else
{
// Клавиша не нажата.
dx
=
0
;
fox.gotoAndStop(
"still"
);
}
// Передвигаем лису и отслеживаем,
// чтобы она не вышла за границы экрана.
fox._x
+
=
dx;
if
(fox._x
<
150
)
fox._x
=
150
;
if
(fox._x
>
400
)
fox._x
=
400
;
// Увеличиваем скорость движения байдарки
if
(riverSpeed
<
20
)
riverSpeed
+
=
0.5
;
}
Скорость игры увеличивается с помощью функции moveFox, в результате байдарка постепенно набирает скорость.
Функция newRock аналогична функции dropNewApplet предыдущей игры и даже немного проще, поскольку при появлении камня выбор ограничен только одним клипом.
function
newRock() {
// Проверяем, прошло ли достаточно времени,
if
(timeSinceLastRock
>
5
) {
// Проверяем, превышено ли максимальное число камней
if
(lastRock
// Новая скала появляется с вероятностью 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).
Рис. 9.8. Область возможного столкновения показана прямоугольником. Поскольку контроль пересечения с камнем ведется по центру клипа "rocks", то реальная область столкновения выглядит несколько меньше