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

на главную - закладки

Жанры

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

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

Шрифт:

Охота на лис

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

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

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

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

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

Подход

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

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

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

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

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

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

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

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

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

Создание кода

Хотя и клипы и слои отличаются от тех, что использованы в игре «Подстрели лису», основной сценарий этой игры применим и в нашем случае. Это сценарий, назначенный клипу «actions». Необходимо внести только два изменения, и я не буду приводить здесь весь код.

Первое изменение состоит в том, что теперь можно выбирать из 10, а не из 7 лисиц, поэтому число внутри функции Math.random должно быть 10.

Второе изменение обращает внимание на положение курсора, так чтобы сцена перемещалась, если пользователь двигает курсор вправо или влево. В этом случае вызывается функция moveScene на корневом уровне. Она принимает значения -1 или 1 в зависимости от направления движения.

// Перемещаем панораму.

if (_root._xmouse < 50) {

_root.moveScene(1);

} else if (_root._xmouse > 500) {

_root.moveScene(-1);

}

Клип «moveScene» находится на главной временной шкале. Этот сценарий начинается с определения нескольких переменных. panAmount отслеживает расстояние, на которое пользователь сдвинулся вправо или влево. Например, если пользователь двигается влево, тогда графика движется вправо и panAmount принимает значение 1. Если он продолжает двигаться в этом направлении, panAmount увеличивается до 2, 3 и т. д. Если пользователь движется в противоположном направлении, panAmount принимает значения -1, -2 и так далее. Поскольку мы не можем нарисовать бесконечно широкую сцену, нам приходится задавать границы панорамирования. Две переменные содержат максимально разрешенное передвижение влево и вправо. Я определил эти границы путем проб и ошибок. Начал я с 50 и увидел, что игрок может доходить до конца деревьев. Тогда я начал пробовать меньшие числа, пока игрок не перестал вылезать за границы сцены.

panLimitLeft = -30;

panLimitRight = 30;

panAmount = 0;

Чтобы перемещаться по сцене, сначала проверяется, не превышает ли следующее значение panAmount допустимые границы. Функция работает только в том случае, если следующее значение находится в пределах допустимого.

Потом три клипа – "trees", "bushes" и "hills" – перемещаются в нужном направлении. Деревья перемещаются с коэффициентом (фактически скоростью) 10, кусты – с коэффициентом 5 и холмы – 4. Я подобрал эти значения путем проб и ошибок. По-моему, они создают достаточное ощущение глубины.

Первые 7 лисиц, которые находятся прямо за деревьями, движутся с ними вместе с коэффициентом движения 10. Остальные три лисы перемещаются с коэффициентом 5, поскольку сидят за кустами.

function moveScene(d) {

// Проверяем, не выходит ли значение панорамирования за

// разрешенные границы.

if ((panAmount+d > panLimitLeft) and (panAmount+d <

panLimitRight)) {

// Увеличиваем значения.

panAmount += d;

// Передвигаем слои с разными скоростями.

trees._x += d*10;

bushes._x += d*5

hills._x += d*4;

// Передвигаем клипы "foxes 0–6".

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

_root["fox"+i]._x += d*10;

}

// Передвигаем клипы "foxes 7–9".

for(i=7;i<10;i++) {

_root["fox"+i]._x += d*5;

}

}

}

Я уже упоминал, что в конце клипа «peeking fox» появляется новый сценарий. Клип «peeking fox» содержится внутри всех трех клипов с лисами. Это статичное изображение лисы. Также он содержит короткую анимацию попадания, которую показывает при щелчке пользователя по лисе. В конце этой анимации я возвращаю клип «peeking fox» в начальную позицию, а также отправляю родительский клип к первому кадру. Это означает, что вместо того чтобы проигрывать анимационную последовательность «покажи – подожди – спрячь», лиса сразу оказывается невидимой.

Поделиться:
Популярные книги

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Пропала, или Как влюбить в себя жену

Юнина Наталья
2. Исцели меня
Любовные романы:
современные любовные романы
6.70
рейтинг книги
Пропала, или Как влюбить в себя жену

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Всплеск в тишине

Распопов Дмитрий Викторович
5. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Всплеск в тишине

Я — Легион

Злобин Михаил
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Я — Легион

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.56
рейтинг книги
Долг

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

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
И только смерть разлучит нас

Лорд Системы 4

Токсик Саша
4. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 4

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Гарем вне закона 18+

Тесленок Кирилл Геннадьевич
1. Гарем вне закона
Фантастика:
фэнтези
юмористическая фантастика
6.73
рейтинг книги
Гарем вне закона 18+

Возвращение Низвергнутого

Михайлов Дем Алексеевич
5. Изгой
Фантастика:
фэнтези
9.40
рейтинг книги
Возвращение Низвергнутого

Неудержимый. Книга XI

Боярский Андрей
11. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XI

Месть за измену

Кофф Натализа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть за измену