Руководство по actionscript. часть 6, стр. 088

С точки зрения языка ActionScript пять экземпляров символа звезды на основной временной шкале являются экземплярами класса Star, который наследуется от класса MovieClip, поэтому мы можем управлять звездами с помощью переменных и методов класса DisplayOb j ect (или любого другого предка класса MovieClip). Например, следующий код использует переменную экземпляра х класса DisplayObject для выравнивания звезд по вертикальной линии, проходящей через координату 100 по оси X:

for (var i:int=0; i < numchildren; i++) { getchi1dat(i).x = 100;

}

Тем не менее метод getChildAt ( ), применяемый в предыдущем коде, имеет одно ограничение. Поскольку в среде разработки Flash глубины отдельных экземпляров символов не совсем очевидны, использование метода getChildAt ( ) для выборочного управления конкретным экземпляром символа оказывается весьма затруднительным. Чтобы без труда идентифицировать конкретный экземпляр и управлять им из кода, мы присваиваем ему имя экземпляра.

Имена экземпляров

Имя экземпляра — это простое строковое имя, присваиваемое экземпляру символа. Чтобы присвоить имя созданному вручную экземпляру символа, мы используем палитру Properties (Свойства). Например, чтобы присвоить имена экземплярам

символа звезды из предыдущего раздела, выполните такую последовательность действий.

1. Откройте палитру Properties (Свойства) (команда меню Window > Properties (Окно > Свойства)).

2. Выберите экземпляр звезды на сцене.

3. Вместо значения (Имя экземпляра) введите значение star 1.

Руководство по actionscript. часть 6, стр. 089

4. Повторите шаги 2-3, чтобы присвоить имена оставшимся экземплярам звезды, начиная со значения star2 и заканчивая значением star5.

При выполнении шага 3 предыдущей процедуры палитра Properties (Свойства) будет выглядеть так, как показано на рис. 29.10 (в нижней его части).

11У1НШ-111М-Г

Rle?&t View Insert Modify Text Commands Control Qebug Window Help

щ

P i\

T

\

sky. fla |St».as

«* La? er 1

51 s> i

10 15

del

f? Scene 1

Worksq One item in fibrarY

Л Properties x |

Movie Cfip

starl

\y\ Instanceof: star

Рис. 29.10. Присваивание имени экземпляру символа звезды

Обратиться по имени к созданному вручную экземпляру символа из кода на языке ActionScript можно с помощью метода экземпляра getChildByName ( ) класса DisplayObjectContainer. Например, следующий код использует метод getChildByName ( ), чтобы переместить экземпляр 11 star3м (звезда с именем экземпляра ffstar3ff)B точку с координатой (0; 0):

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public function Sky ( ) { getChildByName(«star3″).x =0;

getChildByName(«star3″).у = 0;

}

}

}

На этапе выполнения к имени экземпляра можно обратиться через переменную экземпляра name класса DisplayOb j ect. Например, следующий код отображает имена всех экземпляров, размещенных в первом кадре основной временной шкалы файла sky. fla:

for (var i:int=0; i < numchildren; i++) { trace(getchildat(i).name);

}

Кроме того, на этапе выполнения имя экземпляра объекта можно изменить, присвоив новое значение его переменной name, как показано в следующем коде:

HeKHtiOObeKTDisplayObject. name = «некоеИмя»:

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

Руководство по actionscript. часть 6, стр. 090

Соответствие переменных именам экземпляров

Метод getChildByName ( ) из предыдущего раздела позволяет успешно обращаться к конкретному экземпляру символа, однако он не совсем удобен. Чтобы упростить обращение к создаваемым вручную экземплярам символов из кода на языке ActionScript, компилятор Flash предоставляет два автоматических сервиса. Во-первых, когда компилятор встречает именованный экземпляр на временной шкале, он автоматически присваивает его переменной экземпляра класса документа временной шкалы или связанного класса, имеющей такое же имя, как у данного экземпляра. Во-вторых, в некоторых случаях, когда соответствующая переменная экземпляра еще не существует в классе документа временной шкалы или связанном классе, компилятор автоматически создает ее. Рассмотрим эти два автоматических сервиса на примере.

Возвращаясь к примеру с файлом s ky. Да из предыдущего раздела, вспомним, что классом документа файла s ky. fla является S ky и что основная временная шкала файла s к у. fla содержит пять экземпляров символа звезды с именами 11 star 111 — 11 star511. Когда компилятор Flash осуществляет компиляцию файла sky. swf, он автоматически добавляет в класс Sky код, который присваивает эти пять экземпляров звезды пяти переменным экземпляра с именами starl — star5. Результат эквивалентен добавлению следующего кода в начало конструктора класса Sky:

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public function Sky ( ) { starl = getChildByName(«starl»); star2 = getChildByName(«star2″); star3 = getChildByName(«star3″); star4 = getChildByName(«star4″);

star5 = getChildByName(«star5″);

}

}

}

Конечно, в данном случае никаких переменных с именами starl — star5B классе Sky на самом деле не определено. Следовательно, предыдущее автоматическое присваивание экземпляров переменным потенциально опасно.

Руководство по actionscript. часть 6, стр. 091

Возникнет ли ошибка, зависит от параметра компиляции под названием Automatically declare stage instances (Автоматически объявлять экземпляры сцены), устанавливаемого для каждого FLA-файла. Данный параметр находится в области Stage (Сцена) окна ActionScript Settings (Параметры ActionScript), открыть которое можно, выбрав команду меню File > Publish Settings (Файл > Настройки публикации) и нажав кнопку Settings (Параметры), расположенную возле параметра ActionScript version (Версия ActionScript) на вкладке Flash. Когда флажок Automatically declare stage instances (Автоматически объявлять экземпляры сцены) установлен (по умолчанию), компилятор не только присваивает экземпляры сцены соответствующим переменным, но и автоматически объявляет эти переменные. Например, если мы установим флажок Automatically declare stage instances (Автоматически объявлять экземпляры сцены) для файла sky. fla, то компилятор автоматически объявит переменные экземпляра с именами starl — star5B классе Sky. Результат эквивалентен добавлению следующего кода в класс Sky (обратите внимание, что для автоматически объявляемых переменных используется модификатор управления доступом public):

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public var starl-.Star; public var star2:Star; public var star3:Star; public var star4:Star; public var star5:Star;

public function Sky ( ) { starl = getChildByName(«starl»); star2 = getChildByName(«star2″); star3 = getChildByName(«star3″); star4 = getChildByName(«star4″); star5 = getChildByName(«star5″);

}

}

} .

Благодаря предыдущему автоматически сгенерированному коду внутри класса Sky мы можем ссылаться на экземпляры звезд из основной временной шкалы файла sky. fla непосредственно по имени экземпляра. Например, следующий код перемещает экземпляр 11 star3м (звезда с именем экземпляра ffstar3ff)B точку с координатой (0; 0):

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public function Sky ( ) { star3.x = 0; star3.y = 0;

}

}

}

Подобным образом обращаться к экземплярам звезд непосредственно по имени экземпляра можно также из любого сценария кадра на основной временной шкале файла sky. fla. Например, если поместить следующий код в сценарий первого кадра файла sky. fla, то экземпляр ffstar5ff будет повернут на 30°:

star5.rotation = 30;

Ловко, да?

Однако с учетом вышеописанного автоматического поведения, если флажок Automatically declare stage instances (Автоматически объявлять экземпляры сцены) установлен, программист должен проявлять осторожность, чтобы не определить переменные экземпляра, имена которых совпадают с именами экземпляров символов. Например, следующий код определяет переменную экземпляра starl, имя которой совпадает с именем экземпляра символа с основной временной шкалы файла sky. fla:

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public var starl:Star;

public function Sky ( ) { }

}

}

Определение переменной экземпляра в предыдущем коде вызывает следующую ошибку на этапе компиляции:

A conflict exists with definition starl in namespace internal.

Руководство по actionscript. часть 6, стр. 092

На русском языке она будет выглядеть так: Существует конфликт с определением starl в пространстве имен internal.

В отличие от этого, когда флажок Automatically declare stage instances (Автоматически объявлять экземпляры сцены) снят, компилятор не объявляет соответствующие переменные для экземпляров сцены. Например, если мы снимем данный флажок для файла sky. fla, то компилятор не объявит переменные экземпляров с именами starl — star5 в классе Sky. Тем не менее он по-прежнему присваивает тем переменным ссылки на пять экземпляров символа звезды, размещенных на основной временной шкале. В итоге мы должны добавить объявления соответствующих

переменных в класс Sky, как показано в следующем коде. Обратите внимание, что по необходимости переменные объявлены с использованием модификатора управления доступом public.

package { import flash. display. MovieClip;

public class Sky extends MovieClip { public var starl:Star; public var star2:Star; public var star3:Star; public var star4:Star; public var star5:Star;

public function Sky ( ) {

}

}

}

Если убрать объявления переменных из предыдущего кода, то возможны два результата в зависимости от того, объявлен класс с атрибутом dynamic или нет (обратитесь к разд. «Динамические переменные экземпляра» гл. 15). Если класс объявлен без использования атрибута dynamic (как в случае с классом Sky), на этапе выполнения возникнет следующая ошибка, поскольку инструкции присваивания, автоматически добавленные компилятором, ссылаются на несуществующие переменные:

ReferenceError: Error #1056: Cannot create property star5 on Sky.

Руководство по actionscript. часть 6, стр. 093

По-русски она будет выглядеть следующим образом: Ошибка обращения: невозможно создать свойство star5 в классе Sky.

Если, с другой стороны, класс объявлен с использованием атрибута dynamic, то автоматически добавляемые инструкции присваивания на этапе выполнения просто создают новые динамические переменные экземпляра (с именами starl — star5) для каждого экземпляра класса.

Несмотря на то что по умолчанию флажок Automatically declare stage instances (Автоматически объявлять экземпляры сцены) установлен, многие программисты предпочитают не устанавливать его. Как мы только что узнали, если он не установлен, то нединамические классы, связанные с временными шкалами, должны объявлять переменные, которые соответствуют всем именованным экземплярам сцены. Подобные ^явные объявления проливают свет на природу появления переменных в использующем их классе и исключают возникновение ошибок компиляции при редактировании данного класса в других средах разработки (например, в приложении Flex Builder 2).

Стоит отметить, что автоматически генерируемые классы документа и автоматически генерируемые связанные классы всегда компилируются с установленным флажком Automatically declare stage instances (Автоматически объявлять экземпляры сцены). Следовательно, обратиться к именованным экземплярам сцены любой временной шкалы, связанной с автоматически генерируемым классом документа или автоматически генерируемым связанным классом, можно через соответствующие переменные экземпляра.

Обращение к созданному вручную тексту

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

? метод getChildAt ( );

? метод getChildByName ( );

? автоматически присваиваемые переменные экземпляра.

Те же три инструмента могут быть использованы и для обращения к созданному вручную тексту.

Руководство по actionscript. часть 6, стр. 094

В среде разработки Flash текстовые поля создаются с помощью инструмента Text (Текст). Созданные вручную текстовые поля типа Dynamic Text (Динамический текст) или Input Text (Вводимый текст) на этапе выполнения представляются экземплярами класса flash, text. TextField. Как и в случае с экземплярами символов, поля типа Dynamic Text (Динамический текст) и Input Text (Вводимый текст) становятся отображаемыми детьми объекта, представляющего временную шкалу, на которой они размещаются. Кроме того, как и в случае с экземплярами символов, текстовым полям описанных типов могут присваиваться имена экземпляров, которые соответствуют именам автоматически присваиваемых переменных экземпляра.

Например, приведенная ниже последовательность действий описывает, как переместить созданное вручную текстовое поле типа Dynamic Text (Динамический текст) в точку с координатой (200; 300), используя код на языке ActionScript.

1. В среде разработки Flash создайте новый FLA-файл и назовите его mes sage. fla.

2. На палитре Tools (Инструменты) выберите инструмент Text (Текст).

3. Щелкните кнопкой мыши на сцене первого кадра основной временной шкалы файла message. fla.

4. В появившемся поле введите слово hello.

5. На палитре Properties (Свойства) (команда меню Window > Properties (Окно > Свойства)) измените значение Static Text (Статический текст) на Dynamic Text (Динамический текст).

6. На палитре Properties (Свойства) вместо значения (Имя экземпляра) введите msg.

7. Щелкните кнопкой мыши на первом кадре основной временной шкалы файла message. fla (выделите его).

8. Откройте палитру Actions (Действия) (команда меню Window > Actions (Окно > Действия)).

Руководство по actionscript. часть 6, стр. 095

9. Введите следующий код на палитре Actions (Действия):

msg. x = 200: msg. у = 300:

Программное управление временной шкалой

Теперь, когда мы знаем, как обращаться к созданным вручную экземплярам символов Movie Clip (Клип), кратко рассмотрим инструменты, предназначенные для управления воспроизведением этих экземпляров. В следующем списке представлены наиболее важные методы и переменные класса MovieClip для управления временной шкалой. Дополнительную информацию о классе MovieClip можно найти в справочнике по языку ActionScript корпорации Adobe.

? play( ) — инициирует последовательное отображение кадров временной шкалы клипа. Кадры отображаются со скоростью, установленной через переменную экземпляра f rameRate класса Stage среды выполнения Flash.

? stop ( ) — останавливает воспроизведение клипа. Однако обратите внимание, что, несмотря на остановку клипа, среда выполнения Flash продолжает воспроизводить звуки, реагировать на действия пользователя и обрабатывать события, включая события Event. ENTER FRAME. Таким образом, визуальные изменения, происходящие в обработчиках событий, в результате использования метода setlnterval ( ) или события Timer, отображаются даже в том случае, когда головка воспроизведения остановлена. Метод stop ( ) просто предотвращает дальнейшее перемещение головки воспроизведения по временной шкале клипа.

? gotoAndPlay ( ) — перемещает головку воспроизведения временной шкалы клипа на кадр с указанным номером или меткой, после чего начинает воспроизведение временной шкалы с этой точки. Состояние других клипов не изменяется. Чтобы начать воспроизведение других клипов, следует вызвать метод play( ) или gotoAndPlay ( ) для каждого клипа по отдельности.

? gotoAndStop ( ) — перемещает головку воспроизведения временной шкалы клипа на кадр с указанным номером или меткой, после чего останавливает воспроизведение клипа.

? next Frame ( ) — перемещает головку воспроизведения временной шкалы клипа вперед на один кадр и останавливает воспроизведение на этом кадре.

? prevFrame ( ) — перемещает головку воспроизведения временной шкалы клипа назад на один кадр и останавливает воспроизведение на этом кадре.

Руководство по actionscript. часть 6, стр. 096

? currentFrame — возвращает номер кадра, на котором в настоящий момент находится головка воспроизведения клипа. Стоит отметить, что номером первого кадра является 1, а не 0; таким образом, значение переменной currentFrame находится в диапазоне от 1 до значения переменной total Frames.

? currentLabel — возвращает строку, представляющую метку текущего кадра, которая задается в среде разработки Flash.

? cur rentLabel s — возвращает массив, содержащий все метки текущей временной шкалы.

? totalFrames — возвращает количество кадров на временной шкале клипа.

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

Следующий код отображает четвертый кадр экземпляра «starl»: starl. gotoAndStop(4);

Приведенный ниже код останавливает воспроизведение временной шкалы экземпляра «star3″:

star3.stopC );

Следующий код перемещает головку воспроизведения экземпляра «star5″ на два кадра вперед:

star5.gotoAndStop(star5.currentFrame + 2);

Приведенный далее код останавливает воспроизведение временной шкалы всех экземпляров звезды, находящихся на основной временной шкале:

for (var i:int=0: i < numchildren: i++) { getchildat(i).stopc ):

}

Создание экземпляров символов среды разработки Flash из кода на языке ActionScript

Ранее из разд. «Связанные классы для символов Movie Clip (Клип)» мы узнали, что экземпляры символа могут создаваться вручную в среде разработки Flash путем перетаскивания имени символа из библиотеки в сцену временной шкалы. Экземпляры символов, экспортируемые для языка ActionScript, могут также создаваться непосредственно из кода с помощью стандартного оператора new.

Руководство по actionscript. часть 6, стр. 097

Например, ранее мы связали символ звезды с классом Star. Чтобы создать экземпляр символа звезды из кода, мы используем следующее выражение:

new Start )

Чтобы добавить экземпляр символа звезды на основную временную шкалу приложения sky. swf на этапе выполнения, мы бы включили следующий код либо в сценарий кадра на основной временной шкале, либо в метод класса S ky:

var star:Star = new Start ); addChild(star);

Следующий код создает 50 экземпляров звезды и размещает их на экране в произвольных точках:

var sky.-Array = new Array( );

for (var i:int = 0; i < 50: {

sky. pushtnew Start ));

sky[i].x = Math. floor(Math. random( )*550);

sky[i].y = Math. floor(Math. random( )*400);

addChild(sky[i]);

}

Стоит отметить, что код на языке ActionScript может быть использован для создания экземпляров любого символа, экспортируемого для языка ActionScript, неза-

висимо от того, имеет этот символ собственный связанный класс или нет. Иными словами, класс, указанный в окне Linkage Properties (Свойства связывания), не обязательно должен быть существующим пользовательским классом (как, например, класс Star). Как мы узнали ранее, если класс, указанный в окне Linkage Properties (Свойства связывания), не может быть найден с использованием пути к классам, то компилятор Flash создает его автоматически. Автоматически генерируемый класс может применяться для создания экземпляров данного символа из кода.



Полезные ссылки
Случайные записи
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 138
  • 20.03.2011">Руководство по actionscript. часть 2, стр. 071
  • 26.10.2012">Надежный магазин часов watch.24k.ua
  • 09.10.2010">Разница между растровым и векторным изображением
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 029
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.109
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 071
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.61
  • 22.12.2011">Samsung производит процессоры A5 для Apple iPhone 4S и iPad 2
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 133
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.150
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.85
  • 27.07.2011">Ремонт видеокарт поручайте профессионалам
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.148
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 031
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...