Февраль 2011

Руководство по 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 создает его автоматически. Автоматически генерируемый класс может применяться для создания экземпляров данного символа из кода.

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

Предположим, что у нас есть символ Movie Clip (Клип) с именем box symbol и мы хотим создать его экземпляры из кода на языке ActionScript. Рассмотрим необходимую последовательность действий.

1. Выберите символ box_symbol в библиотеке.

2. Откройте меню Options (Свойства) палитры Library (Библиотека), щелкнув кнопкой мыши на значке в правом верхнем углу палитры, и выберите команду Linkage (Связывание).

3. В области Linkage (Связывание) окна Linkage Properties (Свойства связывания) установите флажок Export for ActionScript (Экспорт для ActionScript).

4. В поле Class (Класс) окна Linkage Properties (Свойства связывания) введите значение Box.

5. Нажмите кнопку ОК.

6. По умолчанию в результате выполнения предыдущих шагов среда разработки Flash выведет окно с предупреждением следующего содержания: A definition for this class could not be found in the classpath, so one will be automatically generated in the SWF file on export (Определение для данного класса не может быть найдено в пути к классам, поэтому он будет автоматически сгенерирован в SWF-файле при экспорте). Нажмите кнопку ОК, чтобы закрыть это предупреждение.

Чтобы создать экземпляр символа box_symbol после выполнения предыдущих шагов, мы используем выражение new Box ( ) на любой временной шкале или в любом классе SWF-файла, содержащего символ box symbol.

Имена экземпляров для отображаемых объектов, создаваемых программным путем

Между прочим, как и в случае с экземплярами, создаваемыми вручную, отображаемым объектам, которые создаются программным путем, можно тоже присваивать имя экземпляра через переменную name. Например, следующий код создает экземпляр класса TextField и присваивает ему имя экземпляра «price», добавляет его в контейнер, а затем по имени получает на него ссылку.

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

Var t:TextField = new TextFi eld( ): t. text = «$99.99″; t. name = «price»

var detailsPage:Sprite = new Sprite( ); detailsPage. addChild(t);

trace(detailsPage. getChildByName(«price»)); // Выводит: [object TextField]

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

^ I Имена экземпляров в основном должны использоваться только при обращении к эк-м$л» земплярам текстовых полей или символов библиотеки, созданным вручную в среде 9&S разработки Flash.

К отображаемым объектам, создаваемым программным путем, следует всегда обращаться по ссылке. Например, следующий код демонстрирует две версии метода displayPrice ( ) (это гипотетический метод, который отображает стоимость товара). В обоих случаях стоимость отображается в объекте TextField. В первой версии (рекомендуемой) объект TextField, который будет отображать стоимость, передается в метод как объектная ссылка. Во второй версии в метод передается объект DisplayObjectContainer, который содержит объект TextField, и метод получает ссылку на объект TextField по имени экземпляра.

// Рекомендуется

public function displayPrice (priceField:TextField, price:Number):void { priceField. text = «$» + price;

// He рекомендуется

public function displayPrice (orderForm;Sprite, price.-Number): void { TextField(orderForm. getChildByName(«price»)).text = «$» + price;

}

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

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

В языке MXML имя экземпляра отображаемого объекта может быть установлено через атрибут id, а обращаться к именованным отображаемым объектам можно также с помощью метода getChildByName ( ). Тем не менее, как и в случае с приложениями, разработанными на чистом ActionScript, вместо имен экземпляров предпочтительнее использовать ссылки.

Связывание нескольких символов с одним суперклассом

Ранее из разд. «Связанные классы для символов Movie Clip (Клип)» мы узнали, как связать класс с символом Movie Clip (Клип). Теперь рассмотрим, как обеспечить

одинаковым программным поведением несколько различных символов Movie Clip (Клип), связав их с одним суперклассом.

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

Мы начнем с создания FLA-файла LoginApp. fla в среде разработки Flash. В нем мы создадим два символа — по одному для каждого графического стиля формы регистрации. Назовем первый символ именем LoginForm Stylel, а второй символ — LoginForm_Style2. В каждый символ формы регистрации добавим два созданных вручную текстовых поля (с именами username и password) и кнопку отправки данных (с именем submi tBtп). Сама по себе кнопка является нарисованным вручную экземпляром символа Movie Clip (Клип). На рис. 29.11 изображены два символа формы регистрации.

Login Form_Style1 —

Login Form_Style2

Рис. 29.11. Символы формы регистрации

Далее создадим класс LoginForm, который управляет поведением символов формы регистрации. Он реагирует на нажатия кнопки отправки данных и передает полученную информацию на сервер. В этом примере снимем флажок компиляции Automatically declare stage instances (Автоматически объявлять экземпляры сцены). Соответственно внутри класса LoginForm объявим созданные вручную элементы из символов формы регистрации в качестве переменных экземпляра. Имена переменных экземпляра — username, password и submi tBt n — соответствуют именам экземпляров в символах формы регистрации.

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

Рассмотрим код для класса LoginForm:

package { import flash. display.*; import flash. text.*; import flash. events.*;

public class LoginForm extends MovieClip { public var username:TextField;

public var password:TextField; public var submitBtn:SimpleButton;

public function LoginForm ( ) { submitBtn. addEventListener(MouseEvent. CLICK. submitListener);

}

private function submitListener (e:MouseEvent):void { submit(username. text, password. text);

}

public function submit (name:String, pass:String):void { traceC’Now submitting user: » + name + » with password: » + pass);

// Теперь передаем полученную информацию // на сервер (код не показан). // Обычно для отправки данных на сервер // используется класс flash. net. URLLoader.

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

}

}

}

Наконец, связываем поведение класса LoginForm с символами формы регистрации. Однако поскольку один класс не может быть связан более чем с одним символом, мы не сможем связать класс LoginForm непосредственно с символами формы регистрации. Вместо этого мы должны связать каждый символ формы регистрации с подклассом класса LoginForm. Этот процесс заключается в выполнении следующих шагов.

1. Выберите символ LoginForm_Stylel в библиотеке файла LoginApp. fla.

2. Откройте меню Options (Свойства) палитры Library (Библиотека), щелкнув кнопкой мыши на значке в правом верхнем углу палитры, и выберите команду Linkage (Связывание).

3. В области Linkage (Связывание) окна Linkage Properties (Свойства связывания) установите флажок Export for ActionScript (Экспорт для ActionScript).

4. В поле Base class (Базовый класс) окна Linkage Properties (Свойства связывания) введите LoginForm.

5. В поле Class (Класс) окна Linkage Properties (Свойства связывания) введите LoginForm_Stylel.

6. Нажмите кнопку ОК.

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

7. По умолчанию в результате выполнения предыдущих шагов среда разработки Flash выведет окно с предупреждением следующего содержания: A definition for this class could not be found in the classpath, so one will be automatically generated in the SWF file on export (Определение для данного класса не может быть найдено в пути к классам, поэтому он будет автоматически сгенерирован в SWF-файле при экспорте). Нажмите кнопку ОК этого окна.

8. Выберите символ LoginForm_Style2 в библиотеке файла LoginApp. fla, после чего повторите шаги 2-6, заменив значение LoginForm_Stylel значением LoginForm_Style2 на шаге 6.

В результате выполнения предыдущих шагов компилятор Flash на этапе компиляции автоматически создаст два класса — LoginForm_Stylel и LoginForm_Style2, каждый из которых расширяет класс LoginForm. Затем компилятор свяжет символ LoginForm_Stylel с классом LoginForm_Stylel, а символ LoginForm_Style2 — с классом LoginForm_Style2. Таким образом, оба символа наследуют поведение класса LoginForm.

Композиционный подход как альтернатива связанным классам

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

Например, в предыдущем разделе мы связали символы формы регистрации с классом LoginForm, чтобы предоставить этим символам возможность отправлять информацию на сервер программным путем. Однако можно утверждать, что класс LoginForm не является подтипом класса MovieClip. Скорее это простая коммуникационная утилита, которая помогает получить введенные данные из пользовательского интерфейса. Как таковая, она может (и, возможно, должна) быть определена в виде отдельного класса для последующего использования любым символом, который соглашается предоставлять соответствующие данные.

Для простоты сравнения, следующий код демонстрирует новую версию класса LoginForm, переработанного для использования в качестве вспомогательного класса на временной шкале символа. Новый класс имеет новое имя LoginManager, отражающее его новую роль — класс коммуникационной утилиты. Обратите внимание, что конструктор нового класса принимает ссылки на объекты пользовательского интерфейса, поддерживающие пользовательский ввод.

package { import flash. display.*; import flash. text.*; import flash. events.*:

public class LoginManager { private var username:TextField; private var password:TextField;

public function LoginManager (username:TextField,

password:TextField. submitBtn:SimpleButton) {

this. username = username: this. password = password;

submitBtn. addEventListener(MouseEvent. CLICK, submitListener);

private function submitListener (e:MouseEvent):void { submit(username. text, password. text);

}

public function submit (name:String, pass:String):void { traceC’Now submitting user: » + name + » with password: » + pass);

// Теперь передаем полученную информацию на сервер (код не показан). // Обычно для отправки данных на сервер используется класс // flash. net. URLLoader.

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

}

}

}

Чтобы использовать класс LoginManager, в каждом из символов формы регистрации из предыдущего раздела должен быть определен сценарий кадра со следующим кодом (предположительно, в кадре 1, но в случае с анимированной формой, возможно, далее на временной шкале). В следующем коде аргументы username, password и submi tBt п являются именами экземпляров текстовых полей и кнопки в символе формы регистрации:

var loginManager:LoginManager = new LoginManager(username,

password, submitBtn);

Различие между подходом с использованием класса LoginManager и подходом с использованием класса LoginForm из предыдущего раздела, по сути дела, аналогично различию между композицией и наследованием (дополнительные сведения можно найти в подразд. «Наследование в сравнении с композицией» разд. «Теория наследования» гл. 6). Потенциальными преимуществами подхода с использованием композиции являются следующие.

? Класс LoginManager может наследоваться от любого произвольного класса, в отличие от класса LoginForm, который должен наследоваться от класса MovieClip.

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

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



Полезные ссылки
Случайные записи
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 035
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.25
  • 06.03.2013">Sony готовится ответ HTC One
  • 17.06.2012">«Лаборатория Касперского» отметила сокращение количества спама
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.133
  • 10.03.2011">Руководство по actionscript. часть 4, стр. 044
  • 11.03.2011">Руководство по actionscript. часть 3, стр. 146
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 089
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 011
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 035
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 065
  • 26.08.2010">Классификация сайтов для дизайнера.
  • 28.07.2011">Выживет только лучший
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 051
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 054
Опрос

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

View Results

Loading ... Loading ...