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

Как и в случае с Event. RESIZE, приемники для события Event. MOUSE_LEAVE должны быть зарегистрированы в экземпляре класса Stage приложения Flash Player. Следующий пример демонстрирует базовый код, необходимый для обработки событий Event. MOUSE_LEAVE:

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

public class MouseLeaveSensor extends Sprite { public function MouseLeaveSensor ( ) { // Регистрируем приемник для событий Event. M0USE_LEAVE stage. addEventLi stener(Event. MOUSE_LEAVE, mouseLeaveLi stener);

}

// Обрабатывает события Event. MOUSE_LEAVE private function mouseLeaveListener (e:Event):void { traceCThe mouse has left the building.»);

}

}

Из программы на экран

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

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

ПИВА 23

Обновления экрана

Говоря по существу, все обновления экрана в языке ActionScript можно разбить на две категории: происходящие через регулярные интервалы времени (запланированные обновления) и происходящие сразу после выполнения определенных функций-приемников событий (постсобытийные обновления). Независимо от категории, все обновления экрана являются автоматическими. В ActionScript отсутствуют универсальные способы, позволяющие запросить немедленное обновление экрана. Вместо этого новое графическое содержимое, создаваемое программным путем или вручную в среде разработки Flash, отображается автоматически на этапе запланированного или постсобытийного обновления. В этой главе рассматриваются две разновидности обновлений экрана в языке ActionScript.

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

Запланированные обновления экрана

В ActionScript обновления экрана неразрывно связаны с анимационными возможностями среды выполнения Flash. Даже те приложения, которые созданы исключительно с использованием языка ActionScript в приложении Flex Builder 2 или с помощью консольного компилятора mxmlc, подвержены влиянию системы обновления экрана, реализующей анимационные возможности среды Flash.

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

1. Выполнить код текущего кадра.

2. Обновить экран.

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

3. Перейти к следующему кадру.

4. Повторить цикл.

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

1. Выполнить сценарий кадра 1.

2. Отобразить содержимое кадра 1.

3. Выполнить сценарий кадра 2.

4. Отобразить содержимое кадра 2.

5. Выполнить сценарий кадра 3.

6. Отобразить содержимое кадра 3.

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

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

1. Выполнить сценарий кадра 1.

2. Отобразить содержимое кадра 1 и визуальные результаты выполнения сценария кадра 1.

3. Выполнить сценарий кадра 2.

4. Отобразить содержимое кадра 2 и визуальные результаты выполнения сценария кадра 2.

5. Выполнить сценарий кадра 3.

6. Отобразить содержимое кадра 3 и визуальные результаты выполнения сценария кадра 3.

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

Среда выполнения Flash никогда не прерывает выполнение сценария кадра для того, чтобы обновить экран.

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

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

Оме: Начало выполнения сценария кадра 1 ЮОмс: Завершение выполнения сценария кадра 1 ЮООмс: Начало визуализации содержимого кадра 1 и результатов выполнения сценария кадра

1050мс: Завершение визуализации содержимого кадра 1 и результатов выполнения сценария кадра

1051мс: Начало выполнения сценария кадра 2 1151мс: Завершение выполнения сценария кадра 2

2000мс: Начало визуализации содержимого кадра 2 и результатов выполнения сценария кадра

2050мс: Завершение визуализации содержимого кадра 2 и результатов выполнения сценария кадра

2051мс: Начало выполнения сценария кадра 3 2151мс: Завершение выполнения сценария кадра 3

ЗОООмс: Начало визуализации содержимого кадра 3 и результатов выполнения сценария кадра

3050мс: Завершение визуализации содержимого кадра 3 и результатов выполнения сценария кадра

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

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

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

1. Выполнить сценарий кадра 1.

2. Дождаться следующего запланированного этапа визуализации кадра.

3. Отобразить содержимое кадра 1 и визуальные результаты выполнения сценария кадра 1.

4. Выполнить сценарий кадра 2.

5. Дождаться следующего запланированного этапа визуализации кадра.

6. Отобразить содержимое кадра 2 и визуальные результаты выполнения сценария кадра 2.

7. Выполнить сценарий кадра 3.

8. Дождаться следующего запланированного этапа визуализации кадра.

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

9. Отобразить содержимое кадра 3 и визуальные результаты выполнения сценария кадра 3.

Теперь давайте представим, что сценарий кадра 1 регистрирует функцию-приемник clickListener ( ) в экземпляре класса Stage для событий MouseEvent. CLICK. Всякий раз, когда выполняется функция clickListener ( ), из точки, где на настоящий момент находится указатель мыши, рисуется красная линия. Рассмотрим код сценария кадра для кадра 1:

import flash. events.*; import flash. display.*;

stage. addEventLi stener(MouseEvent. CLICK. cli ckLi stener);

function clickListener (e:MouseEvent):void { graphics. lineStyle(2. OxFFOOOO); graphics. lineTo(e. stageX. e. stageY);

}

Сразу после завершения выполнения сценария кадра 1 метод clickListener ( ) может получать уведомления о возникновении событий MouseEvent. CLICK.

Теперь предположим, что пользователь щелкнул кнопкой мыши в области отображения среды выполнения Flash через 500 мс после начала воспроизведения анимации (то есть в период ожидания, который представлен шагом 2 в предыдущем описании процесса). Метод clickListener ( ) выполняется немедленно, однако визуальные результаты этого не будут отображены до момента наступления следующего запланированного этапа визуализации кадра. На следующем этапе визуальные результаты выполнения метода clickListener ( ) будут отображены вместе с содержимым кадра 1 и результатами выполнения сценария кадра 1.

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

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

1. Выполнить сценарий кадра 1.

2. Дождаться следующего запланированного этапа визуализации кадра. В процессе ожидания, если возникают какие-либо события, выполнять соответствующие приемники событий.

3. Отобразить содержимое кадра 1, визуальные результаты выполнения сценария кадра 1, визуальные результаты выполнения любых приемников событий на шаге 2.

4. Выполнить сценарий кадра 2.

5. Дождаться следующего запланированного этапа визуализации кадра. В процессе ожидания, если возникают какие-либо события, выполнять соответствующие приемники событий.

6. Отобразить содержимое кадра 2, визуальные результаты выполнения сценария кадра 2, визуальные результаты выполнения любых приемников событий на шаге 5.

7. Выполнить сценарий кадра 3.

8. Дождаться следующего запланированного этапа визуализации кадра. В процессе ожидания, если возникают какие-либо события, выполнять соответствующие приемники событий.

9. Отобразить содержимое кадра 3, визуальные результаты выполнения сценария кадра 3, визуальные результаты выполнения любых приемников событий на шаге 8.

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

I Описанные шаги отражают поведение, по умолчанию используемое средой выполнения л, щ Flash для обновления экрана. Однако для некоторых типов событий среда Flash может Ц»У выполнять обновление экрана более быстро. Дополнительную информацию можно получить в разд. «Постсобытийные обновления экрана» далее в этой главе.

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

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

1. Выполнить сценарий кадра 1.

2. Дождаться следующего запланированного этапа визуализации кадра. В процессе ожидания, если возникают какие-либо события, выполнять все зарегистрированные приемники событий.

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

• кадр 1 включает изменения содержимого экземпляра класса Stage, созданные вручную в среде разработки Flash;

• код сценария кадра 1 создал новое или изменил существующее графическое содержимое;

• код функции-приемника, которая была выполнена на шаге 2, создал новое или изменил существующее графическое содержимое.

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

4. Если необходимо, обновить экран, чтобы отразить все изменения, произошедшие на шаге 3.

5. Повторить шаги 1-4 для кадров 2 и 3.

Для вашего сведения, в оставшейся части этой главы и в следующей главе мы будем называть проверку необходимости обновления экрана, происходящую на шаге 3, проверкой запланированного обновления экрана. Всякий раз, когда среда выполнения Flash проводит проверку запланированного обновления экрана, она осуществляет диспетчеризацию события Event. ENTER_FRAME (даже в тех случаях, когда обновления экрана на самом деле не происходит). Реагируя на событие Event. ENTER_FRAME, объекты могут выполнять повторяющиеся задачи, синхронизированные с операцией обновления экрана. В гл. 24 будет рассказано, как использовать событие Event. ENTER_FRAME для создания анимированного содержимого полностью программным путем.

Вы готовы рассмотреть последний гипотетический сценарий? Предположим, что мы удаляем кадры 2 и 3 из нашей анимации, оставляя только кадр 1. Как и раньше, сценарий кадра 1 определяет приемник события MouseEvent. CLICK — clickListener ( ). Как только содержимое кадра 1 и результаты выполнения сценария кадра будут визуализированы (шаг 4 в предыдущем описании процесса), воспроизведение анимации завершится. Тем не менее для продолжения обработки событий цикл обновления экрана среды выполнения Flash должен оставаться активным. Таким образом, для SWF-файла, содержащего всего один кадр, цикл

обновления экрана выглядит следующим образом (описанные шаги также применимы к многокадровому SWF-файлу, воспроизведение которого было просто приостановлено на кадре 1).

1. Выполнить сценарий кадра 1.

2. Дождаться следующего запланированного этапа визуализации кадра. В процессе ожидания, если возникают какие-либо события, выполнять все зарегистрированные приемники событий.

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

• кадр 1 включает изменения содержимого экземпляра класса Stage, созданные вручную в среде разработки Flash;

• код сценария кадра 1 создал новое или изменил существующее графическое содержимое;

• код функции-приемника, которая была выполнена на шаге 2, создал новое или изменил существующее графическое содержимое.



Полезные ссылки
Случайные записи
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.132
  • 12.05.2014">Разработка дизайна интерьера
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.1
  • 24.03.2013">Чартерные рейсы на Мальдивы
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.29
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.110
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 001
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 039
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 016
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.86
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 036
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.90
  • 02.03.2010">Новый вид ретвитов (retweet) в твиттере
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.93
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 123
Опрос

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

View Results

Loading ... Loading ...