Головоломки Flash

         

Уменьшаем расстояние до корабля на


// Уменьшаем расстояние до корабля на 10%.

rocks[i].dist *= 1.1;

// Проверяем, может ли астероид задеть корабль.
if (rocks[i].dist > 1.0) {

// Проверяем, ударил ли астероид корабль,

if (rocks[i].destx > 0 and rocks[i].destx < 550 and rocks[i].desty > 0 and rocks[i].desty < 400) {

// Взрываем астероид и увеличиваем количество

// повреждений.

_root[rocks[i].clip].gotoAndPlayf"explode blue");

damage++;

foreground.displayDamage = damage;

// Смотрим, превысило ли количество повреждений

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

if (damage >= 20) {

removeAllRocks();





Mouse.show();

gotoAndStop("game over");}

// Если астероид не попал по кораблю, то убираем его.

} else {

_root[rocks[i].clip].removeMovieClip();

}

// Убираем элемент из массива,

rocks.splice(i,1);

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

} else {

rocks[i].x = (1.0-rocks[i].dist)*rocks[i].startx + rocks [i].dist*rocks[i].destx;

rocks[i].y = (1.0-rocks[i].dist)*rocks[i].starty + rocks[i].dist*rocks[i].desty;

_root[rocks[i].clip]._x = rocks[i].x; _root[rocks[i].clip]._y = rocks[i].y;

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

_root[rocks[i].clip]._xscale = 100*rocks[i].dist;

_root[rocks[i].clip]._yscale = 100*rocks[i].dist;

}}}

Когда пуля достигает своей цели, вызывается функция checkForHit. Она проверяет все астероиды: находится ли один из них там же, где и пуля. Если да, астероид взрывается и удаляется из массива, увеличивается значение переменной hits.

function checkForHit(x,у) {

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

//на предмет попадания по ним.

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

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

if (_root[rocks[j].clip].hitTest(x,y)) {

// Если да, взрываем астероид

//и удаляем из массива.

hits++;

foreground.displayHits = hits;

_root[rockfj].clip].gotoAndPlay("explode red");

rocks.splice(j,1);

}}}

В конце каждой анимации взрыва (Рисунок 16.2) небольшой сценарий вызывает функцию killRock, которая удаляет любой вызывающий ее клип. Таким образом, можно удалить астероид сразу же, как только он взорвался.

function killRock(clip) {

вызываем эту функцию,

// Когда астероид взорвался,
// чтобы удалить его.

clip.removeMovieClip();
}

Когда игра заканчивается, вызывается функция removeAllRocks, чтобы в кадре "game over" не отображались оставшиеся пули и астероиды.

function removeAllRocks() {

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

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

_root[rocks[i].clip.removeMovieClip();

}}


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