- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - Гэри Розенцвейг
Шрифт:
Интервал:
Закладка:
Если движение лисы продолжается, а клип лисы неподвижен, задается его переход к кадру "run", чтобы создать впечатление бегущей лисы. С другой стороны, если лиса не двигается, но в то же время и не находится в кадре 1, задается переход клипа к этому кадру, и создается впечатление, будто лиса стоит.
function moveFox() {
// Проверяем, нажаты ли клавиши со стрелками.
if (Key.isDown(Key.RIGHT)) {
dx = 10;
// Поворачиваем лису направо.
fox._xscale = -Math.abs(fox._xscale);
} else if (Key.isDown(Key.LEFT)) {
dx = -10;
// Поворачиваем лису налево.
fox._xscale = Math.abs(fox._xscale);
} else {
// Не двигаемся.
dx = 0;
}
// Передвигаем лису.
fox._x += dx;
if (fox._x < 30) fox._x = 30;
if (fox._x > 520) fox._x = 520;
// Меняем поведение лисы (стоит или бежит).
if ((dx != 0) and (fox._currentFrame ==1)) {
fox.gotoAndPlay ("run") ;
} else if ((dx == 0) and (fox._currentFrame != 1)) {
fox.gotoAndPlay ("stand");
}
}Один раз в каждом кадре вызывается функция dropNewApple. Необходимость создания нового яблока определяется тремя вложенными условными выражениями.
Прежде всего проверяется переменная timeSinceLastApple. Условие выполняется только в случае, если ее значение больше 20. Переменная увеличивается на 1 в конце функции.
В следующей проверке определяется, соответствует ли количество упавших яблок общему количеству яблок, которое должно быть сброшено.
Наконец, функция Math.random() задает 10-процентную вероятность того, что яблоко упадет. В результате интервал между падениями двух яблок будет всегда разным.
Для создания нового клипа яблока используется функция attachMovie. Горизонтальное положение ролика выбирается в диапазоне между 30 и 520. Каждый раз при создании нового яблока значение переменной appleSpeed увеличивается.function dropNewApple() {
// Бросаем яблоко, если прошло достаточно времени.
if (timeSinceLastApple > 20) {
// Бросаем, если не превышено
// предельное количество яблок, которые можно бросить.
if (lastApple < totalApples) {
// Устанавливаем вероятность падения яблока в 10 %.
if (Math.random() < .1) {
// Создаем объект-яблоко.
lastApple++;
attachMovie("apple", "apple"+lastApple, lastApple);
_root["apple"+lastApple]._x = Math.random()*490+30;
_root["apple"+lastApple]._y = 0;
// Сбрасываем счетчик времени ожидания.
timeSinceLastApple = 0;
// Увеличиваем скорость падения яблока.
if (appleSpeed < 10) appleSpeed += .5;
}
}
}
// Если не бросили яблоко, сокращаем время ожидания.
timeSinceLastApple++;
}Функция, выполняющая перемещение яблок, должна не только изменять их вертикальное положение, но и проверять, упало ли яблоко на землю или в корзину.
Чтобы определить, упало ли яблоко на землю, функция должна проверить, находится ли яблоко ниже нижней границы экрана. Определить попадание в корзину немного сложнее: необходимо установить, соответствует ли расстояние между яблоком и лисой заданному диапазону. Если яблоко находится от лисы на расстоянии в 10 пикселов по вертикали и 25 пикселов по горизонтали, считается, что оно попало в корзину. Имейте в виду, что центр клипа с лисой находится в центре изображения корзины, поэтому положение корзины фактически определяется положением всего клипа с лисой. На рис. 9.3 показан прямоугольник, который представляет область попадания.
Рисунок 9.3. Если центр яблока попадает в прямоугольную область размером 50x20 пикселов, расположенную вокруг центра корзины, оно считается пойманным ...Примечание
Функция Math.abs() (модуль числа) используется, чтобы определить, столкнулись ли объекты. Если из координат одного объекта вычесть координаты другого, получается положительное или отрицательное значение. Например, если первый объект находится на расстоянии 7 пикселов вправо от второго, вы получаете значение 7, если слева – значение -7. Функция Math.abs() убирает знак, благодаря чему в обоих случаях вы получаете значение 7. Аналогичным образом вы можете проверить, находится ли объект на определенном расстоянии слева или справа от другого.
Если яблоко поймано или упало на землю, вызывается функция removeApple. В первом случае также происходит увеличение счета.
function moveApples() {
// Проверяем все падающие в данный момент яблоки.
for (i=firstApple;i<=lastApple;i++) {
// Определяем координаты яблока.
x = _root["apple"+i]._x;
o = _root["apple"+i]._y + appleSpeed;
// Проверяем, достигло ли яблоко земли.
if (y > 400) {
removeApple(i);
// Проверяем, попало ли оно в корзину.
} else if ((Math.abs(y-fox._y) < 10) and
(Math.abs(x-fox._x) < 25)) {
removeApple(i);
score += 1;
// В противном случае яблоко продолжает падать.
} else {
_root["apple"+i]._y = y;
}
}
}При помощи функции removeClip функция removeApple удаляет клип. Она также увеличивает значение переменной firstApple, в результате функция moveApple прекращает перемещать яблоко вниз. Если яблоко было последним, ролик переходит к кадру "game over". При этом ролик лисы удаляется с экрана.
function removeApple(n) {
// Убираем яблоко с экрана.
_root["apple"+n].removeMovieClip();
// Увеличиваем указатель на первое яблоко на единицу.
firstApple = n+1;
// Проверяем, не последнее ли это яблоко?
if (n == totalApples) {
fox.removeMovieClip();
gotoAndPlay("game over");
}
}
К сведению
Вышеприведенный код использует установленный по умолчанию размер рабочего поля для ролика – 550x400. Если вы хотите указать другой размер, необходимо внести соответствующие изменения в код. Вы также можете настроить левую и правую границу игрового поля. Вышеприведенный код ограничивает расположение яблок и лисы по вертикали диапазоном между 30 и 520 пикселами, задавая ширину границы размером 30 пикселов. Вы можете их увеличить или уменьшить.
Для остановки анимации первый кадр клипа лисы должен содержать команду stop(). Не забудьте также вставить команду gotoAndPlay в последний кадр клипа.
Ролик содержит динамическую текстовую область, связанную с переменной score, поэтому отображение счета не составит проблемы.
Полная игра (файл Applecatch.fla на Web-сайте), состоит из трех кадров. Первый является кадром начала игры и содержит команду stop(). При помощи соответствующей кнопки осуществляется переход к кадру "Play", в котором происходит основное действие игры. Затем следует кадр "Game Over". В отличие от предыдущих игр, использующих три различные сцены, кадры данной игры находятся в одной и той же. Но вы можете использовать вариант и с различными сценами.
Другие возможности
Существует несколько способов усовершенствования этой игры. Вы можете ускорять падение яблок, задать интервал между падениями двух яблок или изменить общее количество бросаемых яблок.
Вы также можете использовать другое изображение лисы и иначе настроить функцию moveApples, увеличивая или уменьшая размер корзины для яблок.
Сообразительный программист наверняка изобразит корзину, наполняющуюся яблоками по мере их попадания, и заставит лису время от времени высыпать собранный урожай в определенном месте экрана.
В следующем разделе будет рассмотрена игра, созданная на основе данной, но в ней будут и плохие яблоки, которые нельзя ловить.Поймай хорошее яблоко
Исходный файл: Applelettercatch.fla
В данном примере в предыдущую игру будет добавлено "плохое яблоко". Это довольно просто сделать. Давайте усложним задачу и сделаем так, чтобы хорошие и плохие яблоки выглядели по-разному.
На каждом падающем яблоке будет нарисована буква. В зависимости от того, гласная это или согласная, яблоко будет считаться хорошим или плохим.
На рис. 9.4 показан кадр из новой игры с несколькими падающими яблоками. Данный пример содержится в файле Applelettercatch.fla на Web-сайте.
Рисунок 9.4. Элементами игры «Поймай хорошее яблоко» являются яблоки с нарисованными буквами
Задача проекта
Задача проекта – так изменить игру «Поймай яблоко», чтобы учитывалось различие букв (гласные/согласные). Поймав любое яблоко с нарисованной гласной буквой, игрок получит очко, поймав яблоко с согласной, он потеряет очки. При этом счет не может быть меньше 0.
Подход
В игре «Поймай яблоко» единственный клип яблока в библиотеке содержал статическое изображение, состоящее из одного кадра. Для показа различных типов яблок нам понадобится два разных клипа, один для хороших яблок, другой для плохих. Кроме этого, каждый клип будет состоять из множества кадров с изображениями различных яблок. Клип хорошего яблока будет состоять из 5 кадров, соответствующих гласным. Клип плохого яблока будет состоять из 20 кадров, представляющих согласные звуки. Буква "Y" использоваться не будет.
Когда наступает время бросать яблоко, оно может с равной степенью вероятности оказаться как хорошим, так и плохим. Код отобразит произвольный кадр из соответствующего клипа.
После того как игрок поймает яблоко, код определит его тип и соответственно изменит счет.
Подготовка ролика
В библиотеке ролика на Web-сайте вы увидите два клипа яблока. Первый, «bad apple», содержит 20 кадров. Каждый кадр включает изображение яблока и согласной. Другой клип, «good apple», содержит 5 кадров для 5 гласных. На рис. 9.5 изображено основное окно Flash, открытое на клипе «bad apple».

