Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
this._x = int(Math.random()*550);
this._y = int(Math.random()*400);
}
}Строка this.hitTest() обозначает, что функция hitTest применяется к текущему клипу. Она включает три параметра: горизонтальное и вертикальное положение мыши, а также булевый параметр (значения true/false). Последний параметр определяет, использует ли Flash для контроля пересечения прямоугольную область, в которой содержится данный клип, или точную форму изображения в клипе. Во втором случае параметр должен быть равен true.
Исходный файл: Runaway.fla Вышеописанный код рассматривается в примере Runaway.fla. Если установить курсор над клипом, он переместится в случайную точку экрана.
Исходный файл: Collision.fla Для того чтобы определить, пересекаются ли два клипа, вы можете использовать один параметр – указатель на второй клип. В ролике Collision.fla на рабочем поле находятся два клипа. Клип большего размера называется "target", меньшего – "bullet". За пределами рабочего поля расположен клип "actions" со следующим кодом:
onClipEvent (enterFrame) {
// Auyniyai, iiiaea ee ioey a ieoaiu.
if (_root["target"].hitTest(_root["bullet"])) {
// Iiiaaaiea, oaaee.eaaai oaeu.
_root["target"]._xscale += 5;
_root["target"]._yscale += 5;
// Oae.aai ioe..
_root["bullet"]._x = 350;
} else {
// Iao iiiaaaiey, ioey eaoeo aaeuoa.
_root["bullet"]._x -= 5;
}
}Код задает перемещение снаряда на 5 пикселов. Если сталкиваются два клипа, мишень немного увеличивается за счет увеличения масштаба на 5 %. Горизонтальная координата снаряда принимает первоначальное значение, и он может опять начинать свое перемещение. Вы научились изменять масштаб клипа и его положение. Далее вы узнаете другие способы, с помощью которых можно изменить внешний вид клипа.
Урок 22. Изменения содержимого экранас помощью клипов
К сожалению, Flash не позволяет заменить один клип другим на рабочем поле. Единственным выходом будет удалить один клип и создать на его месте другой. Но если внешний вид клипа должен часто изменяться, необходим более быстрый способ.
Таким способом является создание клипа, который содержал бы все возможные состояния объекта. Например, если объектом является космический корабль, в ролик необходимо включить кадры, изображающие: космический корабль с выключенным двигателем, с включенным главным двигателем, включенным левым двигателем, с включенным правым двигателем, а также ряд кадров, представляющих взрывающийся космический корабль.
Исходный файл: Changingimages.fla
Данный пример демонстрируется в файле Changingimages.fla. Кнопки, расположенные слева от клипа, помогают выбрать отображаемую часть клипа. На рис. 3.7 изображен фрагмент ролика. Ролик целиком вы можете увидеть на Web-сайте.
Рисунок 3.7. Ролик Changingimages.fla позволяет отображать различные виды одного и того же объектаКаждая кнопка ролика Changingimages.fla задает перемещение клипа в определенный кадр. Приведем пример кода кнопки Up:
on (press) {
ship.gotoAndStop("up");
}Код кнопки Explode отличается от остальных, он использует команду gotoAndPlay, задающую перемещение клипа к кадру «explode» и продолжение воспроизведения:
on (press) {
ship.gotoAndPlay("explode");
}Клип включает последовательность из восьми кадров, которая начинается с кадра «explode» и изображает взрыв. Последний кадр последовательности содержит команду stop, задающую остановку воспроизведения клипа после взрыва. Просматривая ролик Changingimages.fla на Web-сайте, обратите особое внимание на временную шкалу клипа "ship". Здесь кадры маркированы таким образом, что код использует не номера, а имена кадров.
Урок 23. Ввод команд с клавиатуры
В предыдущем примере каждой части клипа соответствовала одна из пяти кнопок. Хотя основным средством управления во Flash-роликах являются кнопки, иногда в играх используется и прямой ввод с клавиатуры.
Существует два способа ввода с клавиатуры. Первый подразумевает особый вариант использования кнопок. Второй способ предполагает только код, который проверяет нажатие клавиш в определенный момент времени.
Для применения кнопочного метода создайте обычную кнопку Flash. Она не должна представлять из себя ничего особенного, так как будет расположена за пределами рабочего поля. Если кнопке назначен следующий код, она будет реагировать на клавишу r и использовать ее для перемещения клипа:
on (keyPress "r") {
circle._x++;
}...Совет
Имейте в виду, что событие keyPress чувствительны к регистру. Это значит, что если кнопке назначена клавиша "г", она не будет реагировать на нажатие комбинации Shift+R.
Исходный файл: Keyboardbutton.fla Для обозначения движений лучше использовать клавиши с изображением стрелок, а не буквы. Для указания данных клавиш используется специальный синтаксис. Ниже приведен сценарий, позволяющий пользователю перемещать клип в четырех направлениях. Вы можете также найти данный сценарий на Web-сайте в файле Keyboardbutton.fla.
on (keyPress «<Rignt>») {
circle._x++;
}
on (keyPress "<Left>") {
circle._x—;
}
on (keyPress "<Up>") {
circle._y—;
}
on (keyPress "<Down>") {
circle._y++;.
}Клавиши не очень удобно использовать в ситуациях, требующих быстрых и плавных движений. В таких случаях при помощи кодового объекта Key вы сможете проверить, нажата ли кнопка.
...Совет
Если для проверки нажатия клавиши используется кнопка, при удерживании клавиши пользователем действие будет повторяться. Это происходит потому, что большинство компьютеров запрограммировано на повторение при удерживании клавиши. Время между первым и вторым нажатием одной и той же кнопки, а также между последовательным нажатием разных кнопок определяется параметрами настройки клавиатуры системы пользователя. В играх, где пользователь может удерживать кнопку для повторения действия, не следует полагаться на функциональные возможности клавиатуры. Лучше применять функцию Key.isDown(), которая рассматривается в данном разделе.
Функция Key.isDown() позволяет проверить состояние клавиши. Например, чтобы проверить, нажата ли клавиша r, используется следующий код:
if (Key.isDown("r")) {
circle._x++;
}Исходный файл: Keyisdown.fla Такой код не может и не должен быть назначен кнопке. Он должен быть назначен клипу "actions", в данном случае в файле Keyisdown.fla. Код находится внутри программы обработки onClipEvent(enterFrame), поэтому проверка происходит в каждом кадре. Код проверяет нажатие клавиш с изображением стрелок, которые обозначаются специальными константами наподобие Key.RIGHT.
onClipEvent(enterFrame) {
if (Key.isDown(Key.RIGHT)) {
_root.circle._x++;
}
if (Key.isDown(Key.LEFT)) {
_root.circle._x–;
}
if (Key.isDown(Key.UP)) {
_root.circle._y–;
}
if (Key.isDown(Key.DOWN)) {
_root.circle._y++;
}
}При запуске данного ролика вы обнаружите, что движения круга стали более плавными. Значение частоты смены кадров было увеличено до 120 кадр/сек, максимального количества, которое может обработать компьютер.
Итак, когда же отдать предпочтение кнопке, отзывающейся на нажатие клавиши, а когда объекту Key? Если нажатие клавиши необходимо только для активации события, используйте кнопку. Она будет реагировать на нажатие клавиши в 100 % случаев. Функция Key.isDown() отреагирует на нажатие клавиши, только если она вызвана. Поэтому, если пользователь нажмет и тут же отпустит кнопку, нажатие может быть пропущено. Это часто происходит на медленных компьютерах.
Функцию Key.isDown() лучше использовать для контроля движения. В данном случае плавное движение будет продолжаться на протяжении всего времени удерживания клавиши. Функция может воспринимать одновременное нажатие нескольких клавиш, в то время как кнопка реагирует только на нажатие одной клавиши.Урок 24. Воспроизведение звука
Завершая вводную часть нашего учебника по ActionScript, рассмотрим использование звука. Flash может воспроизводить звуки, помещая их во временную шкалу ролика или клипа. Вы также можете запускать воспроизведение звука при помощи команд ActionScript.
Запуск звука из библиотеки представляет собой несколько более сложную процедуру, чем просто вызов одной команды. Прежде всего, необходимо убедиться, что звук включен в конечный swf-файл. Это можно сделать в диалоговом окне Symbol Linkage Properties. Сам процесс был рассмотрен на уроке 20 "Управление несколькими клипами". В данном случае предположим, что звук связан с именем beep.
Воспроизведение звука задается при помощи нескольких строк кода. Сначала надо создать объект типа Sound. Затем объекту необходимо сообщить, что "beep" – это звук, который должен воспроизводиться. Потом следует запустить звук. Вот как будет выглядеть код внутри сценария кнопки:
on (press) {
mySound = new Sound();
mySound.attachSound("beep");
mySound.start();
}...Примечание
Функция start, которая используется со звуками, может включать два параметра. Первый – это задержка времени в секундах перед началом воспроизведения звука. В случае, если вы хотите пропустить первые три секунды, значение параметра будет 3. При обычном воспроизведении устанавливается 0. Вторым аргументом является количество циклов звука. Для воспроизведения 10 звуковых сигналов подряд используется значение 10.