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

Листинг 22.16. Демонстрационный класс, представляющий использование класса ScrollBar

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

// Демонстрирует использование класса Scroll Ваг public class ScrolIBarDemo extends Sprite { public function ScrolIBarDemo ( ) {

// Создаем объект TextField

var inputfi eld-.TextFi eld = new TextField( );

// Заполняем текстовое поле начальным содержимым

inputfield. text = «1\п2\пЗ\п4\п5\п6\п7\п8\п9″;

inputfield. height = 50;

inputfield. width = 100;

inputfield. border = true;

inputfield. background = true;

inputfield. type = TextFieldType. INPUT;

inputfield. multiline = true;

addChild(inputfield);

// Создаем полосу прокрутки и связываем ее // с объектом TextField

var scrollbar:ScrolIBar = new ScrollBar(inputfield); addChi ld(scrol1 bar);

}

}

}

Событие TextEvent. LINK

Событие TextEvent. LINK применяется для вызова кода на языке ActionScript, когда пользователь щелкает кнопкой мыши на гипертекстовой ссылке в объекте TextField. Это событие возникает в тех случаях, когда пользователь щелкает кнопкой мыши на гипертекстовой ссылке, адрес URL которой начинается с псевдопротокола event.

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

Введение в использование гипертекстовых ссылок в текстовых полях языка ActionScript можно найти в гл. 27.

Обобщенный код, необходимый для создания гипертекстовой ссылки, которая вызывает код на языке ActionScript, выглядит следующим образом:

объектТехЬП eld. htm}Text = «текстСсылки»;

В предыдущем коде обьектТехЬПе1с1 — это объект TextField, содержащий ссылку, а текстСсылки — текст, который отображается на экране и на котором щелкает кнопкой мыши пользователь. Когда пользователь щелкает кнопкой мыши на тексте текстСсылки, приложение Flash Player выполняет все приемники, зарегистрированные в объекте объектТехЬПе1с! или в его отображаемых предках для события TextEvent. LINK. В каждый приемник передается объект TextEvent, значением переменной text которого является указанная строка содержимоеСсылки. Эта строка обычно обозначает операцию языка ActionScript, которая должна быть выполнена при щелчке кнопкой мыши на ссылке.

Обобщенный код, необходимый для регистрации приемника в объекте TextField для события TextEvent. LINK, выглядит следующим образом:

обьектТехЬПе Id. addEventLi stener (TextEvent. LINK, приемник);

Обобщенный код для приемника события TextEvent. LINK выглядит следующим образом:

private function приемник (e:TextEvent):void { }

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

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

Var t:TextField = new TextFieldC );

t. html Text = «P1ay now!«;

t. autoSize = TextFieldAutoSize. LEFT;

addChild(t);

Следующий код регистрирует метод linkListener( ) в предыдущем объекте TextField — t — для событий TextEvent. LINK:

t. addEventListener(TextEvent. LINK. linkListener);

Наконец, следующий код демонстрирует метод linkListener ( ), который выполняется при щелчке кнопкой мыши на создаваемой ссылке. Внутри метода linkListener ( ) мы выполняем операцию, определенную в задаваемой строке содержимоеСсылки, к которой можно обратиться через переменную экземпляра text класса TextEvent.

private function linkListener (e:TextEvent):void { var operationName:String = e. text; if (operationName == «startGame») { startGame( );

}

}

Теперь попытаемся создать гипертекстовую ссылку, которая не просто вызывает операцию на языке ActionScript, но и передает аргументы для этой операции. Код для этой гипертекстовой ссылки представлен ниже. Обратите внимание, что на этот раз задаваемая строка содержимоеСсылки содержит название операции (di splayMsg) и аргумент (hello world), которые отделены друг от друга произвольным разделителем (запятой).

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

Var t:TextField = new TextFieldC );

t. html Text = «Click here«;

t. autoSize = TextFieldAutoSize. LEFT;

addChild(t);

Следующий код регистрирует метод linkListener ( ) в предыдущем объекте TextField — t — для событий TextEvent. LINK:

t. addEventListener(TextEvent. LINK. linkListener);

Наконец, следующий код демонстрирует метод linkListener( ),в котором для отделения названия операции (displayMsg) от аргумента (hello world) применяется метод экземпляра split ( ) класса String.

private function linkListener (e:TextEvent):void { var linkContent:Array = e. text. split(«.»); var operationName:String = linkContent[0]; var argument:String = linkContent[l];

if (operationName == «displayMsg») { displayMsg(argument);

}

}

В отличие от языка JavaScript, обычный код на языке ActionScript нельзя включить непосредственно в атрибут HREF тега.

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

В листинге 22.17 продемонстрировано использование события TextEvent. LINK в контексте гипотетического приложения для обмена сообщениями (чата), в котором пользователю предоставляется возможность запросить личную беседу, щелкнув кнопкой мыши на имени любого пользователя в поле приложения. Код, представленный в листинге 22.17, сильно упрощен, чтобы можно было сконцентрировать внимание на применении события TextEvent. LINK; в частности, опущен код, относящийся к реальному получению и отправке сообщений.

Листинг 22.17. Использование события TextEvent. LINK для создания имен пользователей, активизируемых щелчком кнопкой мыши

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

// Демонстрирует использование события TextEvent. LINK в примере упрощенного // раздела чата с именами пользователей, активизируемыми щелчком кнопкой мыши, public class ChatRoom extends Sprite {

// Текстовое поле, содержащее сообщения чата

private var messages:TextField;

public function ChatRoom ( ) { // Создаем текстовое поле со ссылками протокола event: messages = new TextFieldC ); messages. multiline = true; messages. autoSize = TextFieldAutoSize. LEFT; messages. border = true: ‘messages. background = true;

// Создаем тестовые сообщения чата с именами пользователей, // активизируемыми щелчком кнопкой мыши messages. html Text =

«Andy says: What’s up?

» + «Mike says: I’m busy…

» + «Andy says: Ok see you later»; addChi1d(messages);

// Регистрируем приемник в объекте // TextField ‘messages’ для событий // TextEvent. LINK

messages. addEventLi stener(TextEvent. LINK, 1i nkLi stener);

}

// Выполняется всякий раз, когда пользователь щелкает кнопкой мыши // на ссылке протокола event: в объекте TextField ‘messages’ private function linkListener (e:TextEvent):void {

// Содержимое переменной e. text — это вся строка, следующая

// за названием протокола event: в атрибуте href. Например.

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

// «privateChat, userl». Эта строка разбивается

// на название операции («privateChat»)

// и соответствующий аргумент («userl»).

var requestedCommand:Array = e. text. split(«.»);

var operationName:String = requestedCommand[0];

var argument.-String = requestedCommand[l];

// Если запрашиваемой операцией // является запрос личной беседы, // то вызываем метод requestPrivateChat( ). if (operationName == «privateChat») { requestPrivateChat(argument);

}

}

// Отправляет приглашение указанному пользователю на участие // в личной беседе

private function requestPrivateChat (userID:String):void { traceC’Now requesting private chat with » + userlD); // Код для работы с сетью не показан…

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

}

}

События ввода уровня приложения Flash Player

Как мы уже неоднократно видели на протяжении этой главы, подавляющее большинство событий ввода приложения Flash Player возникает в результате взаимодействия пользователя с определенными объектами в списке отображения. Тем не менее Flash Player также поддерживает небольшой набор событий, которые возникают в результате взаимодействия пользователя с самим приложением. Мы будем называть такие «события приложения» событиями ввода уровня приложения Flash Player. Диспетчеризация событий ввода уровня Flash Player выполняется в следующих ситуациях, когда:

? изменяются размеры области отображения приложения Flash Player;

? происходит перемещение указателя мыши над областью отображения Flash Player;

? приложение получает или теряет фокус операционной системы (автономная версия Flash Player получает системный фокус, когда фокус устанавливается на окно приложения; версия Flash Player, реализованная в виде модуля расширения браузера, получает системный фокус, когда пользователь щелкает кнопкой мыши на области отображения приложения или, если такая возможность поддерживается, когда пользователь переходит на внедренный объект приложения с помощью клавиатуры).

В табл. 22.5 перечислены типы событий ввода уровня приложения Flash Player. Для каждого типа события столбец «Тип события» содержит константу класса Event, представляющую официальное строковое название типа события. В столбце «Описание» указано конкретное действие пользователя, приводящее к возникновению этого события. Столбец «Получатель» описывает объект, который выступает в роли получателя события при его диспетчеризации. Столбец «Поведение по умолчанию» описывает стандартную реакцию приложения Flash Player на данное событие (у типов событий ввода уровня приложения Flash Player отсутствует поведение по умолчанию). Столбец «Всплывает» содержит информацию о том, имеет ли данное событие фазу всплытия. Столбец «Тип данных объекта, передаваемого в функцию-приемник» определяет тип данных объекта, передаваемого в функцию-приемник, обрабатывающую данное событие. Наконец, столбец «Примечание» содержит важную информацию, касающуюся использования этого события.

Таблица 22.5. События ввода уровня приложения Flash Player

Тип события Описание Получатель Поведение по умолчанию Всплывает Тип данных объекта, передаваемого в функцию-приемник Примечание

Event. ACTIVATE Приложение Flash Player получило системный фокус Отображаемый объект, в котором зарегистрирован приемник события Отсутствует Да Event Возникает даже в тех случаях, когда получатель не находится в списке отображения

Event. DEACTIVATE Приложение Flash Player потеряло системный фокус Отображаемый объект, в котором зарегистрирован приемник события Отсутствует Да Event Возникает даже в тех случаях, когда получатель не находится в списке отображения

Event. RESIZE Изменились размеры области отображения приложения Экземпляр класса Stage Отсутствует Да Event

Таблица 22.5 (продолжение)

Тип Описание Получатель Поведение Всплы — Тип Примечание

события по умолчанию вает данных объекта, передаваемого в функцию-приемник

Event. Указатель Экземпляр Отсутствует Да Event Сопутствующее

MOUSE мыши пе — класса Stage событие Event.

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

LEAVE реместился за пределы области отображения приложения MOUSE_ENTER отсутствует. Используйте событие MouseEvent. MOUSE_MOVE, чтобы определить, когда указатель мыши вновь появится в пределах области отображения Flash Player

Поближе познакомимся с четырьмя событиями, представленными в табл. 22.5.

События Event. ACTIVATE и Event. DEACTIVATE

События Event. ACTIVATE и Event. DEACTIVATE обычно применяются для разработки приложений, которые самостоятельно активизируются или деакти-визируются в ответ на получение или потерю фокуса операционной системы проигрывателем Flash Player. Например, в ответ на потерю фокуса проигрывателем приложение может заглушить все звуки, закрыть открытое меню или приостановить воспроизведение анимации.

В отличие от других событий ввода, с которыми мы познакомились в этой главе, события Event. ACTIVATE и Event. DEACTIVATE не имеют фазы захвата и фазы всплытия. Вместо этого события Event. ACTIVATE и Event. DEACTIVATE могут быть обработаны приемниками, зарегистрированными в любом экземпляре любого класса, унаследованного от класса EventDispatcher (примечание: не только классов, унаследованных от класса DisplayObject). Более того, когда функция-приемник для событий Event. ACTIVATE и Event. DEACTIVATE зарегистрирована в отображаемом объекте, она вызывается, даже когда данный объект не находится в списке отображения.

В листинге 22.18 демонстрируются основы использования событий Event. ACT IVATE и Event. DEACTIVATE — когда проигрыватель Flash Player получает системный фокус, приложение из листинга начинает воспроизведение анимации «вращающийся прямоугольник», а когда Flash Player теряет системный фокус, воспроизведение анимации останавливается (методики создания анимации будут рассмотрены в гл. 24).

Листинг 22.18. Реагирование на события Event. ACTIVATE и Event. DEACTIVATE

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

public class Spinner extends Sprite { private var timer:Timer; private var rect:Sprite;

public function Spinner ( ) { // Создаем изображение прямоугольника rect = new Sprite( ); rect. x = 200; rect. у = 200;

rect. graphi cs.1i neSty1e(1); rect. graphics. beginFi 11 (OxOOOOFF); rect. graphics. drawRect(0, 0, 150, 75); addChild(rect);

// Регистрируем приемник для получения уведомлений,

// когда приложение Flash Player

// получает или теряет системный фокус

addEventLi stener(Event. ACTIVATE, acti vateLi stener);

addEventLi stener(Event. DEACTIVATE, deacti vateLi stener);

// Создаем таймер,

// который будет использован для анимации timer = new Timer(50, О)-;

timer. addEventListener(TimerEvent. TIMER, timerListener);

}

// Вращает изображение прямоугольника private function timerListener (e:TimerEvent):void { rect. rotation += 10;

}

// Обрабатывает события Event. ACTIVATE

private function activateListener (e:Event):void {

// Начинаем вращение изображения прямоугольника

timer. start( );

}

// Обрабатывает события Event. DEACTIVATE

private function deactivateListener (e:Event):void {

// Останавливаем вращение изображения прямоугольника

timer. stop( );

Событие Event. RESIZE

Событие Event. RES IZE обычно используется при разработке приложений с «растягивающимся» содержимым, когда размеры элементов интерфейса изменяются автоматически для соответствия доступному пространству в области отображения проигрывателя Flash Player.

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

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

? изменяются размеры окна автономной версии Flash Player либо пользователем, либо в результате вызова функции f scommand («fullscreen», «true»);

? пользователь изменяет размеры окна браузера, содержащего SWF-файл, внедренный с применением процентных значений для атрибутов height или width тегов ИЛИ.

Следующий HTML-код демонстрирует, как можно внедрить SWF-файл с использованием процентных значений для атрибута width тегов и. Обратите внимание, что для одного измерения задан фиксированный размер в пикселах (height=»7 5″), а для другого — размер в процентах (width=»100%»).

OBJECT classid=»clsid:D27CDB6E-AE6D-llcf-96B8-444553540000″

codebase=»http://fpdownload. macromedi a. com/get/f1ashplayer/current/swf 1 ash. cab»

width=»100r

height=»75″>

width=»100r

height=»75″

type=»application/x-Shockwave-flash» piugi nspage=»http://www. adobe. com/go/getf1ashplayer»>

Приемники для события Event. RES I ZE должны быть зарегистрированы в экземпляре класса Stage Flash Player, как показано в следующем коде. Обратите внимание, что переменной scaleMode обязательно должно быть присвоено значение StageScaleMode. NO_SCALE.

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

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

public class ResizeSensor extends Sprite { public function ResizeSensor ( ) { stage. scaleMode = StageScaleMode. N0_SCALE; stage. addEventLi stener(Event. RESIZE, resi zeListener);

private function resizeListener (e:Event):void { traceCFlash Player was resized»);

}

}

}

Листинг 22.19 расширяет предыдущий код, показывая, как размещать объект Sprite rect в правом верхнем углу области отображения Flash Player при каждом изменении размеров окна приложения. Обратите внимание, что приложение из листинга вручную вызывает код, осуществляющий исходное размещение объекта, поскольку при первоначальной загрузке SWF-файла в приложение Flash Player событие Event. RESIZE не возникает.

Листинг 22.19. Растягиваемая форма

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

// Помещает объект Sprite rect в правый верхний угол области отображения // приложения Flash Player всякий раз при изменении размеров окна // приложения Flash Player public class StretchyLayout extends Sprite { private var rect:Sprite; public function StretchyLayout ( ) {

// Создаем изображение прямоугольника и помещаем его

// в список отображения

rect = new Sprite( );

rect. graphics. lineStyle( );

rect. graphi cs. begi nFi11(OxOOOOFF);

rect. graphics. drawRect(0, 0, 150, 75);

addChild(rect);

// Предотвращаем масштабирование содержимого

stage. scaleMode = StageScaleMode. N0_SCALE;

// Помещаем SWF-файл в левый верхний угол области отображения

// приложения Flash Player

stage. align = StageAlign. TOP_LEFT;

// Регистрируем приемник для событий Event. RESIZE

stage. addEventLi stener(Event. RESIZE, resi zeListener);

// Вручную вызываем код для исходного размещения объекта posi ti onRectanglе( );

}

// Обрабатывает события Event. RESIZE private function resizeListener (e:Event):void { positionRectangle( );

}

// Помещает объект rect в правый верхний угол области отображения

// приложения Flash Player

private function positionRectangle ( ):void {

rect. x = stage. stageWidth — red. width; rect. у = 0;

}

}

}

Событие Event. MOUSE LEAVE

Событие Event. MOUSE_LEAVE обычно применяется для отключения или удаления содержимого, взаимодействующего с мышью, когда указатель покидает пределы области отображения проигрывателя Flash Player. Например, в приложении, которое скрывает системный указатель мыши, заменяя его пользовательским изображением указателя мыши (как было показано ранее в листинге 22.5), изображение пользовательского указателя мыши скрывается, когда он перемещается за пределы области отображения приложения Flash Player.



Полезные ссылки
Случайные записи
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.61
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.25
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 081
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 040
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 118
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 117
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.86
  • 13.11.2011">Делаем iPad в Фотошопе
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 057
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.3
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.26
  • 23.07.2011">Животные рисунки
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.111
  • 03.11.2011">Как создать кинопостер
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 127
Опрос

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

View Results

Loading ... Loading ...