Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Шрифт:
В клипе "fullPicture", клип "picture" находится на одном слое, а маленький квадратный клип "button" – поверх него в другом слое.
В клипе "maskedPicture" клип "picture" также находится на одном слое, а клип "button" – на другом. Однако слой кнопки – это слой-маска, маскируюший слой картинки. Это значит, что только сегмент картинки под квадратом остается видимым, когда клип "maskedPicture" расположен в рабочем поле.
В рабочем поле клипы "fullPicture" и "maskedPicture" расположены бок о бок. Размешать клип "maskedPicture" достаточно сложно, поскольку, когда вы его двигаете, он показывает свои границы, которые довольно велики и покрывают все рабочее поле. Я к тому же увеличил этот клип до 300 %, что сделало его еше больше.
Главная временная шкала содержит четыре кадра. Первый – это страница с правилами. Потом идет кадр "play". Когда игрок заканчивает одну картинку, ролик переходит к кадру "next", чтобы
В ролике используются два динамических текстовых поля. Первое, displayBonus, используется в кадре «play». Поле displayScore используется в кадрах «next» и «game over».
Создание кода
В начале ролика задаются функции roundNum и score. Переменная roundNum содержит номер картинки, которая должна появиться.
// Начинаем с первой картинки.
roundNum = 1;
score = 0;
stop;Игра начинается, когда пользователь нажимает кнопку в первом кадре. Все коды содержатся на главной временной шкале, в первом слое. Нажатие кнопки вызывает функцию setUpRound.
После того как функция отправляет ролик к кадру "Play", она определяет два клипа. Содержашийся в каждом из них клип "picture" устанавливается в кадр, определяемый переменной roundNum.
После этого выбирается случайное место на картинке. Это происходит с учетом того, что плошадь сегмента 36x36, таким образом, это случайное место должно быть не ближе 18 пикселов от края изображения.
В клипе "maskedPicture" положение картинки изменяется таким образом, что случайное место располагается в позиции (0,0), на которой располагается квадрат-маска. Таким образом, если сегмент выбрана из позиции (100, 150), то увеличенная картинка должна быть сдвинута на -100 пикселов по горизонтали и на -150 – по вертикали.
В клипе "fullPicture" картинка остается неподвижной, а движется клип "button", пока не займет нужное положение. Свойсто _alpha равно 0, чтобы кнопка была невидимой.Совет
Вместо того, чтобы задавать свойство _alpha клипа равным 0, попробуйте задать его равным 25 во время отладки программы. Поскольку клип будет видимым, вам будет легче понять, что игра работает.
function setUpRound(pictureNum) {
// Переходим к кадру игры.
gotoAndStop("Play");
// Выбираем картинку в обоих клипах.
fullPicture.picture.gotoAndStop(pictureNum);
maskedPicture.picture.gotoAndStop(pictureNum);
// Задаем случайное положение картинки.
w = fullPicture._width;
h = fullPicture._height;
x = Math.random*(w-36)+18;
y = Math.random*(h-36)+18;
// Передвигаем картинку под маской в это положение.
maskedPicture.picture._x = -x;
maskedPicture.picture._y = -y;
// Задаем координаты кнопки.
fullPicture.button._x = x;
fullPicture.button._y = y;
// Делаем кнопку невидимой.
fullPicture.button._alpha = 0;
// Запускаем таймер.
startTime = getTimer;
}В конце функции setUpRound переменной startTime присваивается текушее время. Это время используется следующим фрагментом кода, который все время пересчитывает бонусные очки. Он берет текушее время, вычитает startTime, а потом вычитает итог из 30000 миллисекунд. В результате бонусное время начинается с 30000 миллисекунд и происходит обратный отсчет до 0. Вместо того чтобы поместить этот процесс в клип "actions", я просто назначил функцию событию onEnterFrame. Это новый прием, появившийся в версии МХ.
// Пересчитывем бонусные очки при каждом обращении к кадру.
_root.onEnterFrame = function {
// Бонус равен 30000 минус значение startTime.
bonus = 30000-Math.floor(getTimer – startTime);
if (bonus < 0) bonus = 0;
displayBonus = "BONUS: "+bonus;
}Другое событие, нуждаюшееся в отслеживании, это onMouseDown. Когда оно проиходит, используется hitTest, чтобы определить, нажал ли пользователь на скрытую кнопку. Если да, то кнопка становится видимой (полупрозрачной) и ролик переходит к другому кадру. Количество бонусных очков прибавляется к обшему количеству, и очки показываются на экране.
// Определяем функцию, отслеживающую нажатие кнопки мыши
// (листенер).
_root.onMouseDown = function {
// Смотрим, щелкнул ли пользователь по мыши.
if (fullPicture.button.hitTest(_root._xmouse,_root._ymouse)) {
// Смотрим, была ли кнопка спрятана.
if (fullPicture.button._alpha < 50) {
// Показываем кнопку.
fullPicture.button._alpha = 50;
// Начисляем очки, score += bonus;
score += bonus;
displayScore = "SCORE: "+score;
if (roundNum < 3) {
//
// следующую.
gotoAndStop("next");
} else {
// Если была последняя – заканчиваем игру.
gotoAndStop("game over");
}
}
}
}
К сведению
Клип «maskedPicture», кроме маски и картинки, содержит еше границы слоя, соответствуюшие маске. Это помогает ему выделяться на экране. Также в каждом кадре ролика содержатся статичные участки текста, объясняюшие играюшему, что происходит.
Вы можете задать свойства каждого растрового изображения, чтобы определить уровень сжатия и сглаживание. Вам придется потрудиться, пока вы не добьетесь удовлетворительных результатов.
Другие возможности
Вам должно быть легко добавлять картинки в эту игру. Вы можете иметь их столько, сколько хотите. Только помните, что надо установить код, узнаюший последнюю картинку в обработчике onMouseDown.
Вы также можете сделать клип "button" больше, чем 36x36. Помните только, что тогда вам придется переделать функцию setUpRound так, чтобы она помешала кнопку дальше, чем на 18 пикселов от каждого края.
Вместо растового изображения вы можете использовать векторный рисунок. Это сделает игру более простой и доступной для маленьких детей. Сделав соответствуюшее оформление и добавив анимационное вступление, можно создать хорошую игру даже для самых маленьких детей, которые еше не умеют читать.Глава 14 Головоломки
• Игра на развитие памяти
• Дедукция
• Игра "Йога"
• Рекурсивные блоки
«Пятнашки» и игра совпадений, описанные в прошлой главе, – игры, над которыми стоит думать. Лимит времени при этом не устанавливается. Но кроме этих игр сушествует множество других головоломок. В этой главе представлены четыре классические игры. В первой пользователя просят запомнить некую последовательность и затем воспроизвести ее. В следующей игре пользователь должен угадать последовательность с помошью подсказок, которые даются после каждой попытки. В третьей игре пользователь "перепрыгивает" через колышки, удаляя их, до тех пор пока не останется один колышек. В последней игре надо уничтожить элементы одного цвета, особым образом расположенные на игровом поле.
Игра на развитие памяти
Исходный файл: Memory.fla
Иногда эту игру называют "Simon", потому что именно так называлось популярное электронное устройство, которое позволяло в нее играть. В этой игре имеется четыре разных фрагмента, которые проигрываются в произвольном порядке. Вы можете это увидеть, запустив файл Memory.fla, размешенный на Web-сайте. При проигрывании фрагмента загорается световое табло и воспроизводится звуковой сигнал. Элементами этой игры являются четыре птицы, сидяшие на ветке (рис. 14.1).
Рисунок 14.1. В игре на развитие памяти на экране показаны четыре птицы
В игре две основные фазы. Первая фаза – птицы чирикают в определенной последовательности. Во второй фазе пользователь пытается воссоздать эту последовательность. Затем фазы повторяются, при этом добавляется еше одна мелодия. Очень скоро последовательность становится настолько длинной, что пользователь не может ее воссоздать, и игра заканчивается.
Подход
Последовательность мелодий хранится в массиве. Каждый раз в массив добавляется новый, случайный номер от 1 до 4. Номер определяет, какая птица должна чирикать.
В первой части игры воспроизводится чириканье птиц. Этот кадр управляется клипом "actions", который анализирует номера в последовательности и сообщает программе, какая птица когда должна петь.
В следующей части игра ждет, когда пользователь начнет щелкать по птицам. После каждого щелчка проверяется, правильно ли была выбрана птица. Таким образом программа все время следит за пользователем, ожидая момента, когда он ошибется. Если игрок сделал все правильно, в последовательность добавляется новая мелодия, и все начинается заново.
Подготовка ролика
В ролике шесть кадров (рис. 14.2). Из них кадры под номерами 3 и 4 – ключевые, они называются «play» и «repeat» соответственно. В кадре «play» воспроизводится чириканье птиц, а в кадре repeat игрок может щелкать по птицам.