91824841

Перемещаем астероид по вертикали и,


// Перемещаем астероид по вертикали и, если нужно,

// на противоположную сторону экрана.

rocks[i]._y += rocks[i].dy;

if (rocks[i]._y > 400) rocks[i]._y -= 400;

if (rocks[i] ._y < 0) rocks [i].__y += 400;

// Вращаем астероид.

rocks[i]._rotation += rocks[i].spin;
}}

Для простоты код, определяющий столкновения, был помешен в одну функцию, которая просматривает все астероиды и пули и с помощью команды hitTest проверяет, попала ли пуля в один из астероидов.
Когда пуля попадает в астероид, его размер и положения записываются, а сам астероид удаляется. Если размер астероида превышал 25%, в этой же точке создается два новых астероида, каждый из которых в два раза меньше своего предшественника. Направление движения и вращения каждого астероида выбирается случайным образом.
Функция checkHits также проверяет, не столкнулся ли какой-либо астероид с кораблем, если да, то уменьшается количество жизней, и ролик переходит к кадру "ship hit". Если не осталось ни одной жизни, то -к кадру "game over".
И в конце функция checkHits проверяет, остались ли элементы в массиве rocks. Если нет, значит, игрок разрушил все астероиды, и ролик переходит к кадру "level over".

function checkHits() {

// Просматриваем все астероиды,

for (j=rooks.length-1; i>=0; i--) {

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

for (j=bullets.length-1; j>=0; j--) {

// Выясняем, попала ли пуля в астероид.

if (rocks[i].hitTest(bullets[j]._x,bullets[j]._y,true)) {

// Удаляем пулю.

bullets[j].removeMovieClip();

bullets.splice(j);



// Опредляем размер и положение новых астероидов.

newsize = rocks[i]._xscale / 2 ;

x = rocks[i]._x;

у = rocks[j]._y;

// Удаляем астероид.

rocks[i].removeMovieClip();

rocks.splice(i,1);

// Создаем на этом месте два новых астероида,

if (newsize >= 25) {

newRock(mewsize,x,y);

newRock(mewsize,x,y);}

// Увеличиваем количество очков. score++;

// Больше не нужно проверять, попала ли пуля

//в какой-нибудь астероид.

break;}}

// Определяем, столкнулся ли корабль с астероидом,



function moveBunny() {

// Проверяем, пришло ли время для следующего шага кролика,

if (getTimert) > bunny.nextmove) {

// Определенное время кролик двигаться не может,

bunny.nextmove = getTimerO + 60 - gameLevel*10;

// Перемещаем кролика.

bunny._x += bunny.move.x*5;

bunny._y += bunny.move.у*5;

// Выясняем, дошел ли кролик до положения цели,

if (bunny._x == bunny.dest.x and bunny._y == bunny .dest .y) {

// Создаем массив с координатами

// возможных положений кролика,

possibilities = new Array;

for (i=0; i

// Определяем расстояние между

// текущим положением кролика и ягодой,

xdiff = Math.abs(berries[i]._x - bunny._x);

ydiff = Math.abs(berries[i]._y - bunny._y);

// Если эта ягода находится рядом...

if ((xdiff == 25 and ydiff == 0) or (xdiff == 0 and ydiff == 25) {

// ...тогда ее положение может

// быть положением цели кролика.

possibilities.push(berries[i]);
}} // Среди возможных положений цели выбираем

// произвольное,

do {

r = int(Math.random()*possibilities.length);

// Указываем новое положение цели

//и направление движения.

bunny.dest.x = possibilities[r]._х;

bunny.dest.y = possibilities[r]._y;

bunny.move.х = (possibilities[r]_x - bunny._х)/25;

bunny.move.у = (possibilities[r]._y - bunny._у)/25;

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

// не возвращается назад или если этот

// путь - единственно возможный.

} while ((bunny.dest.х = lastx and bunny.dest.y == lasty) and (possibilities.length > 1));

// Запоминаем координаты предыдущего положения,

lastx = bunny._x; lasty = bunny._y;
}}

// Проверяем, находится ли кролик поблизости с лисой,
if (Math.abs(bunny._x - fox._x)

} else {

lives--;

gotoAndStop("lost life");
}}}



function checkFall() {

// Учитываем силу тяжести.

fallSpeed -= 10;

// Проверяем, есть ли место для падения,
if (fallSpeed > -foxBounds.bottom) {

foxPos.y += fallSpeed;

// Прекращаем падение и устанавливаем лису на уровень земли.

} else {

foxPos.y -= foxBounds.bottom;

fallSpeed = 0;

falling = false;

fox.gotoAndStop(1);

}

// Смотрим, не упирается ли лиса в верхний блок.

if (foxPos.y > foxBounds.top) {

foxPos.y = foxBounds.top;

fallSpeed = 0;

}}

Функция drawobjects создает эффект движения лисы. Она перерисовывает все объекты в соответствии с положением лисы.

function drawObjects() {

// Цикл по всем объектам.

for(var i=0;i

// Устанавливаем горизонтальную позицию в соответствие

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

_root["object "+i]._x = х = 275 + objects[i].x -foxPos. х;

// Устанавливаем горизонтальную позицию в соответствие

//со значением floor.

_root["object "+i]._y = floor - objects[i].у;
}}

Функция getAcorns просматривает объекты в поисках орехов. Каждый орех проверяется, достаточно ли близко он находится к лисе, чтобы она могла его взять.
Если орех съеден, его свойство type устанавливается в значении used. Этот орех теперь игнорируется всеми функциями, так как они не проверяют объекты типа used.

function getAcorns() {

// Просматриваем все объекты,

for(var i=objects.length-1;i>=0;i--) {

if (objects[i].type == "acorn") {

// Если ближе 30 пикселов - хватаем орех,

if (distance(_root["object "+i],fox) < 30) {

_root["object "+i].play();

objects[i].type = "used";

score += 100;

}}}}

Функция getAcorns вызывает функцию distanse для определения расстояния между лисой и орехом. Эта же функция будет в дальнейшем использоваться функцией moveBunnies.

// Функция для определения расстояния между клипами,

function distance(mc1,mc2) {

d = Math.sqrt(Math.powfmcl._x-mc2._x,2)+ Math.powfmcl._y-mc2._y,2));

return d;

}

Все кролики контролируются функцией moveBunnies. Нет смысла следить за кроликами вне экрана, поэтому перемешаются только кролики, находящиеся не далее чем 275 пикселов от лисы.
Перед перемещением кролика вызывается функция determineBounds для определения границ его возможного перемещения. Если границы позволяют, кролик начинает передвигаться в сторону позиции игрока. Если лиса оказывается достаточно бестолковой, чтобы подобраться близко к кролику, игра заканчивается.


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