Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Шрифт:
Функция clickCard может выполнить одну из 3-х функций. Если значение переменной firstclip равно 0, ей присваивается клип, по которому шелкнули, карта переворачивается, то есть программа переходит к кадру, содержашему соответствуюшую картинку.
Если в переменной firstclip хранится ссылка на некий клип, значит, одна карта уже перевернута. В этом случае программа переворачивает и вторую карту, присваивает переменной secondclip значение клипа и сравнивает два клипа. Если они совпадают, оба клипа удаляются.
Третье условие, которое, на самом деле, проверяется до двух первых, возникает тогда, когда игрок шелкает по одной и той же
Прежде чем проверить эти три условия, функция clickCard определяет, перевернуты ли уже две карты. Если да, значит, игрок уже выбрал две карты, но они не совпали. Прежде чем перевернуть следующую карту, эти две карты поворачиваются рубашками вверх.
function clickCard(clip) {
// Проверяем, отображены ли две карты.
if (secondclip != 0) {
// Располагаем эти две карты рубашками вверх.
firstclip.gotoAndStop(1);
secondclip.gotoAndStop(1);
firstClip = 0;
secondClip = 0;
}
// Проверяем, щелкнул ли пользователь дважды
// по одной и той же карте.
if (firstclip == clip) {
// Переворачиваем карту.
firstclip.gotoAndStop(1);
firstclip = 0;
// Выясняем, есть ли хоть одна перевернутая карта.
} else if (firstclip == 0); {
// Переворачиваем первую карту.
clip.gotoAndStop(clip.picture+1);
firstclip = clip;
// Одна карта должна быть перевернута.
} else {
// Переворачиваем вторую карту.
clip.gotoAndStop(clip.picture+1);
secondClip = clip;
// Проверяем, совпадают ли карты.
if (firstclip.picture == secondClip.picture) {
// Удаляем обе карты.
firstClip.removeMovieClip;
secondClip.removeMovieClip;
firstClip = 0;
secondClip = 0;
}
}
}Вот все, что нужно для игры. У кнопки внутри клипа «Cards» только одна строчка кода, которая передает основной временной шкале информацию о том, что по клипу шелкнули.
on (press) {
// Передаем основной временной шкале информацию о щелчке мышью.
_root.clickCard(this);
}
К сведению
Не забудьте вставить команду stop в первый кадр клипа «Cards». В противном случае во всех картах будут отображаться все картинки.
Другие возможности
Самый простой способ изменить эту игру – добавить фоновый рисунок, который будет отображаться за картами. Картинки на картах могут соответствовать теме фоновой картинки. Вы можете выбрать практически любую тему. Также в первый кадр клипа «Cards» нетрудно добавить картинку для рубашки карты.
Хотя в примере 36 карт, ничто не мешает вам уменьшить или увеличить это число. Просто не забудьте откорректировать размер сетки, а также длину массива в начале игры. Если число карт не будет вписываться в квадратную сетку, вам понадобится изменить код или написать новый, чтобы определить расположение карт.
Еще одна возможность – использовать четыре однотипные карты, а не две. Так будет гораздо проше найти совпадения.
Если вы хотите, чтобы игра определяла, когда найдены все совпадения, добавьте счетчик, который будет увеличиваться при каждом совпадении. Когда счетчик станет равен 18, игра закончится. Затем можно перейти к кадру "you win".Найди картинку
Исходный файл: Fmdthepicture.fla
Эта игра необычная, ее можно найти скорее в книге пазлов, чем на компьютере. Создание Flash-версии этой игры помогает показать несколько полезных приемов.
В игре "Найди картинку" игрок ишет не целую картинку, а ее сегмент. Целиком картинка показана справа, а слева
Игра показана на рис. 13.6. Сегмент слева выбран случайно и увеличен в три раза. Игрок должен шелкнуть по соответствуюшему месту большой картинки. В зависимости от того, насколько быстро он нашел правильное место, начисляются дополнительные очки.
Рисунок 13.6. В этой игре ваша задача найти место маленького изображения слева на большом изображении справа
Задача проекта
Чтобы создать эту игру, ваш сценарий должен уметь выбирать случайный сегмент из большой картинки и показывать его рядом с ней. Это требует использования масок. Также ActionScript должен уметь сопоставить сегмент с соответствуюшей областью на большой картинке.
Кроме манипуляций с изображениями, в игру должен быть включен таймер. Таймер начинает с некоего большего числа и производит обратный отсчет. Когда игрок верно угадывает место сегмента на картинке, он получает дополнительные очки в зависимости от показаний таймера.
Подход
Способ, каким сегмент картинки отображается на экране, основан на использовании слоев. В клипе картинка находится на одном слое, а маленький квадрат используется как маска для этого слоя. Только та часть картинки, которая находится под квадратом, оказывается видимой, когда клип отображается на экране.
Картинка имеет размер 400x300. Квадрат – размер 36x36. Когда картинка передвигается под квадратиком маски, видна только та часть картинки размером 36x36, которая находится под квадратом. Хотя перемешение картинки сделано в ActionScript, маска создана во временной шкале клипа во время подготовки ролика.
Когда пользователь отмечает положение сегмента на целой картинке, ему нужно шелкнуть по этому месту. Было бы естественно расположить на этом месте невидимую кнопку, дело только в том, что кнопка должна сама себя уничтожить, поскольку курсор пользователя заменяется на руку. Вместо этого поместите обычный клип на это место и используйте hitTest, чтобы определить, когда по нему шелкнут.
В ролике используются Flash МХ-листенеры, чтобы поместить весь код в главную временную шкалу. Это значит, что реакция на шелчок мыши и обслуживание изменяюшегося таймера должны быть частью сценария главной временной шкалы, а не одного из "actions\' – клипов.
Совет
С помошью Flash 8 плеера стало возможным делать почти что угодно с помошью всего лишь одного сценария в главной временной шкале. Для этого необходимо регистрировать события, такие как onMouseUp и onEnterFrame, в функциях. Это может заменить обработчик onClipEvent в "actions\' – клипах. Но поскольку эта технология не совместима сверху вниз с Flash 5, может пройти некоторое время, прежде чем она начнет широко применяться.
Эта игра показывает не одну картинку, а три. Обшее число набранных игроком очков складывается из бонусных очков, полученных за все три картинки. Сыграйте прямо сейчас, чтобы познакомиться с игрой.
Подготовка ролика
Имя эталона основного клипа в библиотеке – «picture». Он содержит три растровых изображения, по одному в каждом кадре. В первом кадре находится команда stop. Картинки выстроены так, что верхний левый угол каждой располагается в центральной точке клипа.
Клип "picture" никогда не находится в рабочем поле сам по себе, а внутри двух других клипов: "fullPicture" и "maskedPicture".