Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материал. часть2 / Розенцвейг_Adobe_Flash_Создание аркад, головоломок и других игр с помощью ActionScript.rtf
Скачиваний:
52
Добавлен:
11.02.2016
Размер:
9.87 Mб
Скачать

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

Структура ролика такая же, как и в предыдущем примере. Четыре слоя – «Фон», «Кусты», «Холмы» и «Деревья» – шириной примерно в 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» в начальную позицию, а также отправляю родительский клип к первому кадру. Это означает, что вместо того чтобы проигрывать анимационную последовательность «покажи – подожди – спрячь», лиса сразу оказывается невидимой.

gotoAndStop(1);

_parent.gotoAndStop(1);

Соседние файлы в папке материал. часть2