Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
- Название:Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript краткое содержание
Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.
Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Клип, содержащий яблоко, представляет собой статическое изображение. Клип с лисой более сложный. Его первый кадр, помеченный "stand", содержит изображение неподвижной лисы. Второй кадр, "run", представляет собой начало анимации, в которой ноги лисы двигаются. В последнем кадре анимации содержится функция gotoAndPlay, возвращающая клип к кадру "run". В результате мы имеем два варианта поведения клипа с лисой: первый – клип остается в кадре 1; второй запускает анимацию всех кадров, начиная с кадра 2.
Так как и лиса, и яблоки появляются в ролике только после соответствующего запроса кода, в диалоговом окне Linkage properties содержащим их эталонам необходимо назначить свойство "Export for ActionScript". Яблоко получает идентификатор "apple", лиса – идентификатор "running fox".
Создание кода
Как и в большинстве наших игр, все события данной игры запускаются при помощи клипа «actions». В нашем примере этот клип расположен за пределами рабочего поля в верхнем левом углу экрана.
Сценарий, назначенный клипу "actions", вызывает функции главной временной шкалы ролика. Это упрощает код, так как перед именами клипов не нужно добавлять префикс _root.
После загрузки клипа код вызывает функцию initGame,а затем вызывает три функции при каждом обращении к кадру.onClipEvent (load) {
_root.initGame();
}
onClipEvent (enterFrame) {
_root.moveFox();
_root.dropNewApple();
_root.moveApples();
}Таким образом, вся работа осуществляется четырьмя функциями, которые находятся в главной временной шкале. Рассмотрим каждую из них. Первая функция, initGame,инициализирует в начале игры целый ряд переменных. Она создает и клип с лисой. Этот клип создается при помощи кода, а не добавляется при создании ролика потому, что лиса должна располагаться поверх яблок. Если бы клип лисы создавался одновременно с роликом, тогда каждое яблоко, созданное кодом, помещалось бы поверх лисы. Это позволяет нам управлять размещением уровня, в котором содержится лиса, относительно уровня с яблоками. Лисе отведен уровень 999,999. Яблоки будут помещаться начиная со слоя 1 и, следовательно, будут располагаться под лисой.
function initGame() {
// Инициализация переменных, хранящих
// номера первого и последнего яблока.
firstApple = 1;
lastApple = 0;
// Инициализация переменной, хранящей число пойманных яблок.
score = 0;
// Указываем общее количество яблок.
totalApples = 20;
// Скорость падения и счетчик времени
// между появлениями яблок.
timeSinceLastApple = 0;
appleSpeed = 5;
// Создаем экземпляр клипа, содержащий лису.
attachMovie ("running fox", "fox", 999999);
fox._x = 275;
fox._y = 300;
}Для того чтобы переместить лису, объект Key должен проверить состояние клавиатуры. С помощью функций Key.isDown(Key.RIGHT) и Key.isDown (Key.LEFT) проверяется, нажаты ли стрелки «вправо» и «влево» соответственно. Переменная dxпринимает значение от 10 до -10 и показывает, насколько и в каком направлении должна переместиться лиса.
Примечание
Функция Key.isDown () определяет, удерживается ли определенная клавиша в данный момент. Она особенно полезна в играх, где управление осуществляется при помощи клавиатуры. Для задания клавиши используется ее код. Помимо номеров, например 65 для буквы "А", для задания специальных клавиш, таких как стрелка "вверх", могут использоваться константы, в данном случае Key.UP. Коды клавиш приведены в приложении В справочного руководства по ActionScript Flash MX.
Кроме переменной dx,функция задает переменную _xscale клипа лисы. Действительное значение _xscale остается неизменным, но может быть либо отрицательным, либо положительным. В зависимости от этого клип поворачивается, и лиса начинает двигаться в том или ином направлении.
После задания переменной dxклип лисы перемещается на расстояние, соответствующее указанной величине. Затем проверяется, совпадает ли новое положение с левой и правой границами экрана.
Если движение лисы продолжается, а клип лисы неподвижен, задается его переход к кадру "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 показан прямоугольник, который представляет область попадания.
Читать дальшеИнтервал:
Закладка: