Создание Flash игр -практические уроки

         

Область возможного столкновения



Рисунок 9.8 Область возможного столкновения показана прямоугольником. Поскольку контроль пересечения с камнем ведется по центру клипа "rocks", то реальная область столкновения выглядит несколько меньше


Количество столкновений сохраняется в переменной spills. После шести столкновений игра переходит к кадру с меткой "lose", и игра считается завершенной. При этом происходит вызов функции removeAll, которая будет рассмотрена далее.

function moveRocks() {
// Проверяем все камни.
for (i=firstRock;i // Определяем координаты камня.
x = _root["rock"+i]._x; y = _root["rock"+i]._y - riverSpeed;
// Выясняем, вышел ли камень из поля зрения.
if (y < -50) {
removeRock(i);
// Проверяем, что с камнем не было столкновений.

} else if ((_root["rock"+i].hit == false) and (Math.abs(y-fox._y) < 60) and (Math.abs(x-fox._x) < 25)) {
spills += 1;
// Столкновение.


_root["rock"+i].hit = true;
// Переворачиваем байдарку.
fox.gotoAndPlay("spill");
// Останавливаем байдарку.
riverSpeed = 0;
// Игра закончена?
if (spills > 5) {
removeAll();
gotoAndPlay("lose");
}
}
// Продолжаем перемещать камень.
_root["rock"+i]._y = y;
}
}

Как и функция removeApple, функция removeRock предназначена для проверки того, является ли данный камень последним. В этом случае игра переходит к кадру с меткой "win".

function removeRock(n) {
// Убираем со сцены клип камня.
_root["rock"+n].removeMovieClip();
// Увеличиваем счетчик для первого камня.
firstRock = n+1;
// Проверяем, был ли этот камень последним,
if (n == totalRocks) {
removeAll();
gotoAndPlay("win");
}
}

В предыдущем фрагменте кода указаны два случая завершения игры. В обоих случаях вызывается функция removeAll, которая убирает с экрана все оставшиеся скалы и клип лисы. Иначе эти элементы останутся на экране даже после завершения игры.

function removeAll() {
// Убираем со сцены все объекты
for (i=firstRock;i _root["rock"+i].removeMovieClip();
}
fox.removeMovieClip();
}



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