Чтение онлайн

ЖАНРЫ

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Розенцвейг Гэри

Шрифт:

При помощи функции Mouse.hide в блоке onClipEvent(load) скрывается курсор мыши.

onClipEvent (load) {

// Задаем время между появлениями лис.

timeBetweenFoxes = 2000;

// Вычисляем, когда должна появиться следующая лиса.

nextFox = getTimer+timeBetweenFoxes;

// Инициализируем переменную, содержащую количество

// попаданий и число выстрелов.

score = 0;

shotsLeft = 50;

_root.showScore = "Score:"+score;

_root.showShotsLeft = "Shots Left:"+shotsLeft;

// Прячем курсор.

Mouse.hide;

}

...

Примечание

Использование объекта Mouse позволяет контролировать видимость курсора, расположенного над рабочим полем ролика. При помощи команды Mouse.hide вы

можете скрыть курсор, при помощи команды Mouse.show – вновь вывести его на экран.

Так как курсор скрыт, его необходимо заменить чем-нибудь, чтобы игрок видел, по какому месту экрана он щелкает. В данном случае клип «cursor» ставится в соответствие положению курсора мыши.

В остальном функция onClipEvent(enterFrame) повторяет аналогичную функцию игры "Поймай лису".

onClipEvent (enterFrame) {

// Передвигаем курсор.

_root["cursor"]._x = _root._xmouse;

_root["cursor"]._y = _root._ymouse;

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

if (getTimer>=nextFox) {

// Сокращаем время до следующего появления лисы.

timeBetweenFoxes -= 5;

// Проверяем, не завершена ли игра.

if (shotsleft < 1) {

_root.gotoAndPlay("End");

// Если нет, показываем новую лису.

} else {

// Задаем появление новой лисы.

while (true) {

fox = int(Math.Random*7);

if (_root["fox"+fox]._currentFrame == 1) {

break;

}

}

// Начинаем анимацию лисы.

_root["fox"+fox].gotoAndPlay(2);

// Вычисляем момент появления следующей лисы.

nextFox = getTimer+timeBetweenFoxes;

}

}

}

Функцию onClipEvent(mouseDown) из игры «Поймай лису» необходимо изменить, учесть условия игры «Подстрели лису». Прежде всего, в качестве активной точки курсора будут использоваться координаты клипа «cursor», а не реальные координаты курсора мыши, которые с обновлением кадра могут немного измениться. Затем в функции проверяется, попал ли пользователь по какому-нибудь из семи клипов. Если один из клипов поражен, в клипе «fox» внутри пораженного клипа осуществляется переход к кадру «hit» – пользователь видит, что попал в лису. Значение переменной score увеличивается в случае поражения лисы, значение переменной shotsLeft уменьшается в любом случае. Игра заканчивается, когда с помощью функции onClipEvent (enterFrame) перед созданием новой лисы обнаруживается, что у игрока не осталось выстрелов. Ролик завершается не сразу после последнего выстрела, а через одну-две секунды.

onClipEvent (mouseDown) {

// Показываем анимацию выстрела.

_root["cursor"].gotoAndPlay("blast");

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

x = _root._root["cursor"]._x;

o = _root._root["cursor"]._y;

// Проверяем, в какую лису попал пользователь.

for (i=0; i<7; i++) }

// Проверяем на попадание только "высунувшихся" лис.

if (_root["fox"+i]["fox"]._currentFrame <= 1) {

// Проверяем, попал ли пользователь

// в какую-либо из лис.

if (_root["fox"+i].hitTest(x, y, false)) {

// Показываем, что попал.

_root["fox+i].fox.gotoAndPlay("hit");

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

score++;

}

}

}

// Уменьшаем число оставшихся выстрелов.

shotsLeft–;

// Обновляем счет, отображаемый на экране.

_root.showScore = "Score:"+score;

_root.showShotsLeft = "Shots Left:"+shotsLeft;

}

Данный код также задает переход клипа, содержащего курсор, к кадру «blast», анимация вспышки продолжается в течение нескольких кадров, затем ролик возвращается к кадру 1. Даже если игрок не попал в лису, он видит, что выстрел был сделан. Следующая функция, onClipEvent(unload), запускается перед исчезновением клипа с рабочего поля. Это происходит при завершении игры. В данном случае функция необходима, чтобы сделаеть курсор видимым.

onClipEvent (unload) {

// Отображаем обычный курсор.

Mouse.show;

}

К сведению

После создания кода необходимо присвоить копиям клипа имена с «fox0» по «fox6», соответствующие их именам в библиотеке. В нашем примере центр всех клипов с изображениями лис совпадает с центром рабочего поля. Это было сделано следующим образом: анимация была добавлена в главную временную шкалу, выделена, скопирована при помощи команды Edit → Copy Frames (Редактировать →

Копировать кадры) и вставлена в пустой клип.

Другие возможности

В игру легко внести различные изменения. Заданное количество выстрелов можно заменить таймером. Игра может состоять из уровней: игрок будет переходить на другой уровень, поразив определенное количество лис.

Имейте в виду, что игра дает возможность набирать более 50 очков. Каким образом? В ходе игры лисы начинают появляться друг за другом все быстрее и быстрее. Через некоторое время на экране одновременно будут появляться несколько лис. Когда пути двух лис пересекаются, вы можете убить их одним выстрелом, однако это требует сноровки. Если хотите, отмените данное свойство.

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

Охота на лис

Исходный файл: Huntafoxfa

Одна из самых устойчиво популярных долгие годы игр – "Охота на оленей". В этой игре вы часами сидите, наблюдая пейзаж, пока не покажется олень, которого можно будет застрелить. Несмотря на то, что продано миллионы копий этой игры, она достаточно простая. Во Flash можно легко сделать что-нибудь в этом роде.

Задача проекта

Задача состоит в том, чтобы сделать игру-стрелялку, позволяющую пользователю передвигаться влево и вправо по пространству, большему, чем способно вместить в себя рабочее поле экрана. Мишени возникают в случайное время и в случайных местах, вне зависимости от того, куда сейчас смотрит игрок. Перемещение должно создавать игроку иллюзию пространства, так чтобы близкие объекты двигались быстрее далеких.

Подход

Все, что вы должны сделать по сравнению с предыдущей игрой, – это позволить пользователю перемещаться по большому фоновому изображению из стороны в сторону. Но это не так-то просто. Одни элементы фона ближе к играющему, чем другие. Чтобы у игрока действительно создалось ощущение движения охотника, близкие объекты должны двигаться быстрее дальних.

Чтобы этого добиться, мы разбиваем элементы фона на четыре группы: близко – деревья, подальше – кусты, еще дальше – холмы, затем – небо и земля. Небо и земля остаются неподвижными. А деревья, кусты и холмы движутся в зависимости от того, насколько далеко они от игрока.

Лисы прячутся за деревьями и в кустах. Это значит, что они должны двигаться вместе с этими элементами. Посмотрите на исходный файл Huntafox.fla на сайте, чтобы понять, как это выглядит. Если вы двигаете курсор вправо по рабочему полю, панорама смещается вправо. Видите, как деревья движутся быстрее кустов, а кусты быстрее холмов? Заметьте также, что деревья иногда затеняют кусты. Хорошему игроку нужно совсем немного подвигать панораму, чтобы убить максимально возможное количество лис. На рис. 8.8 показан случай, когда угол зрения почти не позволяет увидеть лису за деревом.

Рисунок 8.8. Лиса выглядывает из-за куста, который частично заслонен деревом

Подготовка ролика

Структура ролика такая же, как и в предыдущем примере. Четыре слоя – «Фон», «Кусты», «Холмы» и «Деревья» – шириной примерно в 1200 пикселов центрованы на рабочем поле шириной в 550 пикселов. Слои "Кусты, Холмы и Деревья содержат по одному клипу в каждом – они называются «bushes», «hills» и «trees» и включают в себя все элементы соответствующего слоя.

Слоев с лисами два. Один слой содержит лис, прячущихся за кустами, а другой – прячущихся за деревьями. Клипы с лисами за деревьями носят имена от "fox0" до "fox6", а клипы с лисами за кустами – от "fox7" до "fox9".

Клипы с лисами такие же, как в игре "Подстрели лису", только лиса остается видимой гораздо дольше. Чтобы лисы могли прятаться за узкими деревьями, в каждом клипе я использовал слои-маски, позволяющие скрыть те части лисы, которые не должны быть видны.

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

Поделиться с друзьями: