KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Гэри Розенцвейг, "Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript" бесплатно, без регистрации.
Перейти на страницу:

Команда stopDrag не требует никаких параметров. Одновременно может перетаскиваться только один клип, поэтому команде необходимо лишь остановить текущее действие перемещения, благодаря чему клип вернется в неподвижное состояние.

Одним из недостатков команды startDrag является то, что одновременно может быть перемещен только один клип. Кроме того, клип перемещается автоматически, поэтому за его движением трудно проследить. По этой причине вам не помешает знать еще один способ перетаскивания клипа.

Исходный файл: Dragbetter.fla Соответствующий код содержится в файле Dragbetter.fla. Ролик устроен аналогично ролику из примера Dragcomplex.fla, клип которого содержит невидимую кнопку. Однако данной кнопке назначен совершенно другой сценарий. Согласно данному сценарию, переменная drag получает значение true, когда пользователь нажимает на кнопку, и значение false, когда отпускает.

on (press) {

drag = true;

}

on (release) {

drag = false;

}

Переменная drag является глобальной переменной и совместно используется всем кодом клипа. В зависимости от значения drag сценарий определяет, должен ли клип следовать за курсором. Сценарий устанавливает соответствие между переменными _x, _y перетаскиваемого клипа и _xmouse, _ymouse ролика. Два последних параметра описывают положение курсора мыши относительно рабочего поля основного ролика.

onClipEvent (enterFrame) {

if (drag) {

this._x = _root._xmouse;

this._y = _root._ymouse;

}

}

Ключевое слово this обозначает ссылку на текущий объект. Сценарий назначен клипу «circle», поэтому this относится к нему. В следующем разделе мы рассмотрим другие способы обращения к клипам на различных уровнях.

Урок 18. Клипы и уровни

Начинающему программисту на ActionScript будет трудно понять, каким образом устроены клипы и уровни. Клип можно представить как ролик внутри основного Flash-ролика. Этот клип имеет свои переменные и атрибуты, отличные от параметров и атрибутов основного ролика.

Каждый раз, когда вы помещаете клип на рабочее поле, вы создаете новый объект. Основной Flash-ролик является объектом, а клип – объектом внутри этого объекта.

Flash-ролик можно сравнить с коробкой, полной игрушек. Если вы раскрасите коробку в синий цвет, игрушки не станут синими. Каждая из них сохранит свой первоначальный цвет. С другой стороны, если вы перенесете коробку на другое место, остальные игрушки последуют за ней, сохранив при этом свои свойства, такие как цвет и положение внутри коробки.

Предположим, коробка с игрушками закрыта, и вы просите кого-то в комнате достать машинку. Если человек не знает, что игрушка находится внутри коробки, ему будет нелегко это сделать. Недостаточно просто сказать: "Достань машинку". Необходимо сказать: "Достань машинку, которая находится в коробке".

Подобным образом устроены и клипы. Если ваш клип расположен на главной временной шкале Flash-ролика, вы можете обратиться к нему по имени "toyTruck" ("игрушечный грузовик"). Однако, если ваш клип "toyTruck" расположен внутри другого клипа под названием "toyBox", к нему необходимо будет обратиться следующим образом: "игрушечный грузовик внутри коробки с игрушками", или "toyBox.toyTruck".

Исходный файл: Levels.fla

На рис. 3.4 изображен похожий случай. Данный ролик можно найти на Web-сайте в файле Levels.fla.

Рисунок 3.4. Клип «secondMC» включен в клип «firstMC», находящийся на рабочем поле

Файл Levels.fla содержит два клипа. Однако только файл «firstMC» находится на рабочем поле. Клип «secondMC» находится внутри «firstMC». Текстовое окно на рабочем поле и в каждом клипе связано с переменной testVariable [7] . Эти текстовые окна отображают значения переменной testVariable на рабочем поле и в клипах «firstMC» и «secondMC» соответственно. Рабочее поле, а также каждый клип содержат кнопку, увеличивающую значение testVariable. Каждой кнопке назначен следующий код:

on (press) {

testVariable++;

}

Кнопка изменяет значение переменной testVariable на уровне того клипа, в котором находится данная кнопка. Кнопка, расположенная на рабочем поле, изменяет переменную testVariable на главном уровне. Кнопка в клипе «firstMC» изменяет переменную testVariable в «firstMC», кнопка в «secondMC» – переменную testVariable в «secondMC».

Следует отметить, что три переменные с именем testVariable являются тремя разными переменными. Находясь на разных уровнях, они никак не связаны друг с другом.

Нажатие одной из кнопок меньшего размера изменяет значение переменной testVariable только на том уровне, где она расположена.

Вы можете изменять значение переменных не только на уровне, где находится код, но и на других уровнях при помощи синтаксиса ActionScript. Примером могут служить три кнопки большего размера, расположенные в нижней части экрана.

Все три кнопки находятся на рабочем поле, а не внутри клипов. Первая кнопка изменяет значение testVariable, не указывая определенный клип. В результате изменяется переменная testVariable рабочего поля.

Вторая кнопка указывает переменную testVariable внутри клипа «firstMC». Код выглядит следующим образом:

on (press) {

firstMC.testVariable++;

}

В результате изменяется переменная в клипе «firstMC». Для изменения переменной внутри клипа «secondMC», необходимо учитывать, что «secondMC» находится внутри «firstMC» и программе нужно это указать.

on (press) {

firstMC.secondMC.testVariable++;

}

Во всех приводимых до сих пор примерах имена копий клипов указывались прямо в коде. Существует и другой способ обращения к клипам – свойство _root:

_root["firstMC"].testVariable++;

Это удобно, если имя копии клипа содержит пробел, в таком случае данный метод является единственно возможным. Свойство _root используется также при создании более сложного кода, где надо представить имя клипа как строку для неявного указания этого имени. Применение данного метода будет рассмотрено в следующем разделе.

Урок 19. Копирование клипов

Важным аспектом создания игры является умение манипулировать клипами. Но сначала нужно научиться создавать клипы. Хотя во Flash это сделать несложно, вы, возможно, захотите, чтобы ваш код создавал клипы во время воспроизведения ролика.

Представьте себе игру, в которой космические корабли врага атакуют игрока. Приближается один корабль, за ним следующий и т. д. Вместо того чтобы заранее создавать сотни клипов, ваш код может создавать их по мере необходимости.

Существует два способа создания клипов: копирование существующего клипа и создание клипа из эталона, находящегося в библиотеке, но не используемого изначально на рабочем поле.

В первом случае используется функция duplicateMovieClip, при помощи которой создается дубликат существующего клипа. Приведем пример:

firstclip.duplicateMovieClip(«newclip»,0);

Функция duplicateMovieClip запускается копируемым клипом. Поэтому при ее использовании упоминается имя этого клипа, в данном случае «firstclip». Функция также содержит два параметра: имя новой копии клипа и уровень нового клипа.

г х "" (

Это может немного вас запутать. Термин уровень здесь (применительно к команде duplicateMovieClip) означает порядок расположения клипов. В предыдущем же разделе данный термин использовался для описания включения одного клипа в другой.

В случае, если клип создан на уровне 0, как в предыдущем примере, он располагается под клипом уровня 1. Клип уровня 1 находится под клипом уровня 2 и т. д.

Не беспокойтесь, что два клипа окажутся на одном уровне, Flash не позволит это сделать. Достаточно в каждой команде duplicateMovieClip указывать другой номер уровня.

Исходный файл: DuplicateMovieClip.fla В примере DuplicateMovieClip.fla демонстрируется применение данной команды. В первом и единственном кадре главной временной шкалы переменная level имеет значение 0. На рабочем поле находится кнопка "new MC", а также клип "firstclip". Каждый раз при нажатии кнопки выполняется следующий код:

on (press) {

// Aoaee.oai ia.aue eeei.

firstclip.duplicateMovieClip("newclip"+level,level);

// Iiiauaai aai a neo.aeio. iiceoe..

_root["newclip"+level]._x = int(Math.random()*550);

_root["newclip"+level]._y = int(Math.random()*400);

// Oaaee.eaaai n.ao.ee.

level++;

}...

Примечание

Обратите внимание, что в коде ActionScript я в первый раз использовал комментарий. Строки комментария начинаются с двух косых черт. Содержание строки, следующей за косыми чертами, полностью игнорируется Flash и предназначено для того, чтобы вы понимали, какое действие выполняет код. Чем длиннее блоки вашего кода, тем больше они нуждаются во вспомогательных комментарих. Комментарии используются для последующего редактирования кода, а также для того, чтобы вашему коллеге было легче его понять.

В данной программе обработки переменная level используется по-разному. Во-первых, для присвоения имени новому клипу (сначала клипу присваивается имя newclipO). Переменная также отображает уровень клипа.

В конце программы значение переменной level увеличивается на 1. Таким образом, следующий создаваемый клип будет называться level1 и располагаться на уровне 1.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*