_root[rocks[i].clip]._xscale = 100*rocks[i].dist;
_root[rocks[i].clip]._yscale = 100*rocks[i].dist;
}
}
}
Когда пуля достигает своей цели, вызывается функция checkForHit. Она проверяет все астероиды: находится ли один из них там же, где и пуля. Если да, астероид взрывается и удаляется из массива, увеличивается значение переменной hits.
function checkForHit(x,y) {
// Просматриваем все объекты-астероиды
// на предмет попадания по ним.
for(j=rocks.length-1; j>=0; j–) {
// Выясняем, попадет ли пуля в этот астероид.
if (_root[rocks[j].clip].hitTest(x,y)) {
// Если да, взрываем астероид и удаляем из массива.
hits++;
foreground.displayHits = hits;
_root[rock[j].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();
}
}
К сведению
В клипе «foreground» находятся текстовые поля, связанные с переменными hitsи damage.К сожалению, так как они расположены на первом уровне внутри клипа, они не будут реагировать на изменения значений hitsи damage,принадлежаших основной временной шкале. То есть для этих текстовых полей необходимо указать команды типа _root.displayDamage = damage. Для того чтобы избежать недоразумений, эти области были названы displayDamageи displayHits.
Другие возможности
Возможно, вы захотите создать свои собственные вариации этого ролика. Допустим, реализовать такую идею: пули всегда будут попадать в одну точку экрана. Игрок сможет управлять кораблем с помошью клавиш со стрелками. Например, если игрок нажимает клавишу со стрелкой «влево», то чтобы создать иллюзию перемешения, все астероиды двигаются вправо.
Также можно усовершенствовать игру, предусмотрев уровни и изменив отображение числа столкновений с астероидом. Например, у вас есть некий механизм подсчета этого числа: когда его значение приблизится к максимальной отметке, начнет мигать красная лампочка.
Исходный файл: Spacerocks.fla
Теперь создадим игру, аналогичную предыдушей, но на этот раз кораблем будет небольшой графический объект в центре экрана. Астероиды движутся в различных направлениях. Эта игра похожа на многие классические аркады 70-х и 80-х годов, хорошо знакомые большинству читателей. На рис. 16.3 показан кадр ролика Spacerocks.fla.
Рисунок 16.3. В игре «Астероиды» действующие объектыI – небольшой корабль и астероиды различных размеров
Задача проекта
В этой игре предусмотрены уровни и ограниченное число жизней. Корабль может столкнуться с астероидом три раза. Если игрок взрывает все астероиды, то он переходит на следующий уровень, где астероидов больше и где они движутся быстрее.
Игрок может повернуть корабль вправо или влево, включить ускорители и таким образом переместить корабль вперед, а также может стрелять по астероидам. После использования ускорителя корабль продолжает двигаться по инерции. Если игрок повернет корабль и включит ускорители, его скорость изменится из-за сообшенного ему импульса. Нажав клавишу со стрелкой вниз, игрок в любой момент может остановить корабль.
Пули – это небольшие клипы, исходное положение которых совпадает с положением корабля; пули движутся туда, куда направлен нос корабля в момент выстрела. Количество пуль в игре не ограничено, но игрок может выстрелить снова только после того, как пройдет время, необходимое на перезарядку.
Изначально размер астероида составляет 100 %, скорость и направление движения произвольные. Когда по нему первый раз попадает пуля, он распадается на два астероида, размер каждого из которых – 50 %, направление их движения также произвольно. Эти астероиды, в свою очередь, могут распасться на два более мелких, размер которых будет составлять 25 % от исходного астероида. Если после этого в астероид попадает пуля, он взрывается. Когда все астероиды будут разрушены, игрок сможет перейти на следующий уровень. Однако если астероид столкнется с кораблем, уменьшится количество жизней.
Подготовка ролика
Библиотека для этого ролика несложная. В ней содержатся астероиды трех типов: «rock1», «rock2» и «rock3». Для того чтобы внести в игру некоторое разнообразие, каждый раз при создании астероида случайным образом выбирается один из трех клипов.
Читать дальше
Конец ознакомительного отрывка
Купить книгу