- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг
Шрифт:
Интервал:
Закладка:
Игра на развитие памяти
Исходный файл: Memory.fla
Иногда эту игру называют "Simon", потому что именно так называлось популярное электронное устройство, которое позволяло в нее играть. В этой игре имеется четыре разных фрагмента, которые проигрываются в произвольном порядке. Вы можете это увидеть, запустив файл Memory.fla, размешенный на Web-сайте. При проигрывании фрагмента загорается световое табло и воспроизводится звуковой сигнал. Элементами этой игры являются четыре птицы, сидяшие на ветке (рис. 14.1).
Рисунок 14.1. В игре на развитие памяти на экране показаны четыре птицы
В игре две основные фазы. Первая фаза – птицы чирикают в определенной последовательности. Во второй фазе пользователь пытается воссоздать эту последовательность. Затем фазы повторяются, при этом добавляется еше одна мелодия. Очень скоро последовательность становится настолько длинной, что пользователь не может ее воссоздать, и игра заканчивается.
Подход
Последовательность мелодий хранится в массиве. Каждый раз в массив добавляется новый, случайный номер от 1 до 4. Номер определяет, какая птица должна чирикать.
В первой части игры воспроизводится чириканье птиц. Этот кадр управляется клипом "actions", который анализирует номера в последовательности и сообщает программе, какая птица когда должна петь.
В следующей части игра ждет, когда пользователь начнет щелкать по птицам. После каждого щелчка проверяется, правильно ли была выбрана птица. Таким образом программа все время следит за пользователем, ожидая момента, когда он ошибется. Если игрок сделал все правильно, в последовательность добавляется новая мелодия, и все начинается заново.
Подготовка ролика
В ролике шесть кадров (рис. 14.2). Из них кадры под номерами 3 и 4 – ключевые, они называются «play» и «repeat» соответственно. В кадре «play» воспроизводится чириканье птиц, а в кадре repeat игрок может щелкать по птицам.
Рисунок 14.2. Шесть кадров игры на развитие памяти: «start», «wait», «play», «repeat», «correct» и «wrong»Клип каждой птицы состоит из трех частей. Первая – непосредственно клип с самой птицей, первый кадр которого представляет собой изображение, второй и остальные кадры – анимация (птица чирикает, открывая и закрывая рот). Ролик начинается с того, что клип каждой птицы находится в первом кадре.
Вторая часть клипа – кнопка. Одна и та же кнопка используется для каждой птицы, но к ней прикреплен разный код. Кнопка расположена за изображением птицы, так что ее не видно.
Третья часть клипа каждой птицы – просто анимация, показывающая сообщение, которое "вылетает" из клюва птицы. Этот простой клип используется для каждой птицы один раз. Экземпляр анимации сообщения и птица названы соответственно. Например, первая птица называется "birdl", а сообщение – "notel". В анимации сообщения первый кадр пустой, там анимация останавливается. Во втором кадре анимации происходит возврат к первому кадру. В соответствующее время мы инициализируем сообщение, которое вылетает из клюва птицы....Совет
Если вы внимательно посмотрите на элемент "Bird Button" из исходного ролика, вы увидите, что кадры "Up", "Over" и "Down" пусты, а в кадре "Hit" содержится контур птицы. Это значит, что никакого изображения на рабочем поле для кнопки не будет, а область нажатия кнопки будет совпадать с формой кадра "Hit". Такой способ создания невидимой кнопки отличается от уже описанного, когда создается кнопка и ее значение _alpha обнуляется.
Если рассмотреть анимацию птиц, вы увидите, что звук прикреплен к каждой из них. Звук автоматически воспроизводится при проигрывании анимации с птицей. Каждый звук немного отличается от другого.
В различных кадрах появляются различные части клипов птиц. Клипы с изображениями самих птиц представлены во всех шести кадрах. Однако кнопки появляются только в кадре repeat, потому что только там игрок может щелкать мышкой по птицам. Анимация сообщения появляется только в кадрах под номерами 3–6, в первом и втором кадрах она не нужна.
Также в каждом кадре ролика содержатся указания, что должен делать пользователь. В верхнем правом углу всех кадров, кроме первого, находится текстовое поле scoreDisplay.
Создание кода
Код этого ролика делится на две части. Первая часть – набор функций, расположенных в первом кадре ролика. Вторая часть находится в клипе «playback actions», который управляет воспроизведением мелодий в кадре «play». Небольшие фрагменты кода есть и в других местах.
Функции, используемые в этом ролике, расположены в первом кадре основной временной шкалы. Они инициализируют переменные игры, отвечают за реакцию на щелчки мышью и воспроизводят мелодии.
Сначала в игре вызывается функция initGame, которая устанавливает все переменные. Эта функция вызывается в начале игры всегда и в конце, если игрок хочет сыграть заново, то есть снова переходит к первому кадру.
Функция initGame очищает массив notes, затем вызывает функцию addNextNote, чтобы поместить в этот массив случайное число. Также она указывает, что счет игры должен отображаться равным 0.
initGame();
stop();
function initGame() {
// Очищаем массив сообщений.
notes = new Array();
scoreDisplay = "Score: 0";
// Добавляем первое сообщение.
addNewNote();
}Функция addNextNote случайным образом выбирает номер кадра от 1 до 4 и помещает его в массив notes.
function addNextNote() {
// Выбираем случайное число из диапазона от 1 до 4.
r = int(Math.Random()*4+1);
// Добавляем число в массив.
notes.push(r);
}Остальные функции этой игры используются позже. Функция startRepeat вызывается тогда, когда игрок прослушал пение птиц и должен щелкать по их изображениям, чтобы воспроизвести соответствующие мелодии. Переменная repeatNum отслеживает, по какому элементу должен щелкнуть игрок. Изначально ее значение равно 0, а затем оно изменяется каждый раз, когда пользователь щелкает по птице.
function startRepeat() {
// Определяем, по какому элементу
// должен теперь щелкнуть пользователь.
repeatNum = 0;
// Переходим к кадру, где размещены кнопки.
gotoAndPlay("repeat");
}Функция clickBird вызывается теми кнопками, которые спрятаны за изображениями птиц; ей передается номер элемента, по которому щелкнули. Сначала функция проигрывает анимацию птицы и соответствующую анимацию пения. Затем сравнивает сообщение со следующим сообщением в списке. Если они совпадают, значит, игрок правильно выбрал птицу, и значение переменной repeatNum увеличивается. Если это было последнее сообщение, игра переходит к кадру «correct». В противном случае функция ждет, пока не выберут следующее сообщение. Если сообщение не совпадает с предопределенным, ролик переходит к кадру «wrong», и игра заканчивается.
function clickBird(note) {
// Воспроизводим анимацию птицы.
_root["bird"+note].gotoAndPlay(2);
// Воспроизводим анимацию сообщения.
_root["note"+note].gotoAndPlay(2);
// Проверяем, правильно ли был выбран элемент.
if (note == notes[repeatNum]) {
// Ожидаем воспроизведения следующей мелодии.
repeatNum++;
// Если мелодий больше нет, игрок правильно угадал
// последовательность.
if (repeatNum > notes.length-1) {
scoreDisplay = "Score: " + notes.length;
gotoAndPlay("correct");
}
} else {
// Игрок ошибся.
gotoAndPlay("wrong");
}
}Кадр «play» проигрывает каждую мелодию из последовательности в соответствии со сценарием, прикрепленным к клипу «playback actions». Сценарий начинается с того, что устанавливает две переменные. Переменная noteNum следит за тем, какое сообщение должно быть проиграно следующим, а переменная nextTime – когда оно должно быть проиграно.
onClipEvent(load) {
// Начинаем с мелодии под номером 0.
noteNum = 0;
nextTime = 0;
}На каждом шаге ролика в кадре «play» текущее время сравнивается со значением переменной nextTime. Если текущее время превышает это значение, проигрывается следующая мелодия.
Анимация пения и птицы инициализируются точно так же, как если бы они вызывались при щелчке мышью. Затем изменяются значения переменных noteNum и nextTime, чтобы подготовиться к воспроизведению следующей мелодии. Переменная nextTime увеличивается на 1000, то есть следующая мелодия будет проиграна через одну секунду.
Когда будут проиграны все сообщения, ролик вызовет функцию startRepeat, которая была рассмотрена ранее. То есть игра перейдет к кадру «repeat» и будет ждать, когда пользователь попытается восстановить последовательность.onClipEvent(enterFrame) {
// Выясняем, пришло ли время проиграть следующую мелодию.
if (getTimer() > nextTime) {
// Получение сообщения.
note = _root.notes[noteNum];
// Проигрывается анимация пения
// и соответствующий звуковой файл.
_root["bird"+note].gotoAndPlay(2);
_root["note"+note].gotoAndPlay(2);
// Ждем одну секунду, прежде чем проиграть следующую
// мелодию.
nextTime = getTimer() + 1000;
noteNUm++;
// Если больше сообщений нет, продолжаем со следующего
// шага.

