Сам себе девелопЕр. Ваяем аркаду. Часть нумеро финале

Xakep, номер #039, стр. 039-078-3


if (this.hitTest( _root.sship ) ){

_root.gotoAndStop ( "gameover" );

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

this.gotoAndStop(1);

Теперь полностью код выглядит следующим образом:

onClipEvent (load) {

function reset(){

this._x=600;

this._y=random(200)+100;

enemySpeed=random(24)+10;

this.gotoAndStop(1);

}

Необходимые ограничения

Чтобы сделать игру более интересной и запоминающейся, давай усложним задачу конечному игроку, сократив доступное количество лазеров за один экран. Трех лазеров будет вполне достаточно для достойной обороны своего корабля. Реализация подобной задачи очень проста - мы считаем количество лазеров на экране. Когда первый лазер покидает экран, в счетчик прибавляется единица, что позволяет игроку выпустить еще один лазер. Итак, выбери корабль в окне Actions и добавь две новых строчки в разделе onClipEvent (load)

maxLasers=3;

depthCounter=1;

Первая строка ограничивает количество лазеров до 3. Вторая строка определяет количество лазеров в данный момент в видимой части экрана. Теперь внесем еще несколько изменений.

Изменим строчку

if (Key.isDown(Key.CONTROL)) {

на

if (Key.isDown(Key.CONTROL) and (laserCounter<=maxLasers)) {

Теперь лазер размножается только при нажатии клавиши Ctrl.

Замени также строчку

_root.laser.duplicateMovieClip( "laser"+laserCounter, laserCounter );

_root["laser"+laserCounter]._visible=true;

на

_root.laser.duplicateMovieClip( "laser"+depthCounter, depthCounter );

_root["laser"+depthCounter]._visible=true;

depthCounter++;

if (depthCounter>maxLasers){

depthCounter=1;

}

Теперь количество лазеров у нас подсчитывается через отдельный depthCounter, который перебирает значения 1, 2, 3, в то время как laserCounter делает выборку между 1 и 3 в зависимости от количества лазеров на экране. Осталось лишь добавить уменьшения значения на единицу после того, как лазер покидает видимую область экрана. Для этого выберем объект лазер и, используя Actions, добавим под строкой

if (this._x>600){

Следующий код

_root.sship.laserCounter--;

Этот код уменьшает значение laserCounter на единицу после того, как лазер покидает видимую область экрана, т.е. за границы экрана в 600 точек.

Конец игры

Осталось лишь добавить надпись в случае проигрыша. При большом желании можно нарисовать отдельный фильм, но сейчас более важен сам механизм реализации завершающей части игры. На основном экране после каждого слоя добавь два дополнительных фрейма (кадра). Теперь сделай пустыми (Insert> Blank keyframe или F7) третьи кадры для слоев enemy, laser, sship и control. Во время игры программа двигается по первым двум фреймам, в то время как в случае столкновения программа перебрасывается на третий фрейм. Теперь выбери третий фрейм слоя control и назови его gameOver. Не покидая главного меню, создай новый слой и назови его game over, добавив пустой кадр (Insert> Blank keyframe или F7) в третий фрейм. В этом фрейме набери соответствующий текст, извещающий об окончании игры. Осталось лишь проверить результат. Согласись, чего-то все же не хватает? Необходимо добавить клавишу перезагрузки. Для этого создай новый слой, назвав его restart. Добавь пустой кадр в третий фрейм нового слоя (Insert> Blank keyframe или F7). Создай кнопку перезагрузки и напиши на ней все что пожелаешь. Теперь преобразуй ее в символ (Insert> Convert to symbol), назвав restart и в разделе Instance выбрав Bhavior > Button и чуть ниже в Options Track as Button. Осталось лишь добавить небольшой код. В Actions набери следующий код:

Назад на стр. 039-078-2  Содержание  Вперед на стр. 039-078-4