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

Btj g

- ro g

ra m

S

>• S Os 3

3 2 О?

ra ~ ш i Z ь

i о ci cc. у i ra S ^ 4 i

t g §.° z vgiS ¦= g E ^

iff

SB

Ь h 1 § ь

s 5 ш 1 >¦

С I О С LL

-o * ra

g * as

и

ш ш

Jo

Z Q

ш ш

z z

of ш ш1

Я»

зЗ

Z Z

су s н 2 I Hi J а

m oj vo

Зсл or

OJ ГО 5

5 5 ,^ H Q

2 i о f-g

X m IT OJ *

1

Я OJ +i

hi

5. с о о ^ fc

X 3 T ^

¦ ^» — w

i ^ т n

¦ ? oj bs

i e si

m OJ r J3

OJ ro

$ I e|

ro

P5 jj if

ill

all

oj o ° с?

Jfc 5 ro

J Ш I

i. a oj о

oj js

S = 2

p

E s з

x s Z

iitll

a^p^» p п! s 11 si s

f?. — о Й

Ю ^ QJ >

О О п; эх с;

J — О. О, О О

X С С X С

С

S

3

о Z

го

5,2 ш „««ё 8 ш

с 2 го >5 й и vo о. л о. ш о VO О. 3

I

I

1.8

? и ш

ill

Z 1= го

5 ш

ш о

X 0J

i

§5

а3:

с X

° 3

5 81

z ™ »

8 5 iT

§ = Р

! *S J

* F ^ =Г oj fD

8S

о

Q.

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

15

CO *

о s

Q. I

5 z

> Q — oj

а Я i 8

JO’

S

LU

ro

CO *

a-

III

8

vo ё 9- s vg o? Я з 8

fD X

?z

m -

я § S 9

.1 &|* ё г

ai 2 *

8″

В S 8 I

5’5

О Q.

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

U U Q.

oj fD ь VO

> с m о о

1p

# 0 ?

I I p I ^ p s S й Б

(D * (U О (D

a s. s>5$

> С I Q-iS

= а«1ё

ro s>

я s t 5





Q. ГО

g a* gj g, oj

л О 1 I ro ifl

О ^ flj _ Q. VO

s ою 8i I

lI О ГО н 5 s oj i i m ^

m

z о

i|

5 о

о

- oj, 5

1 С 3

го о Э со л

0J

ей и о «2 и i

го? 5

oj О ш ш1

о О Z Z

15

ш О

1=/

о о Z?

р

6 О Z Z

Регистрация приемников для событий мыши

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

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

1. Применяя информацию о событии в столбце «Описание» табл. 22.1, найдите константу для желаемого типа события в столбце «Тип события».

2. Создайте функцию-приемник с единственным параметром, имеющим тип данных MouseEvent.

3. Просмотрите столбец «Получатель» табл. 22.1, чтобы определить объект-получателя события.

4. Наконец, зарегистрируйте функцию, определенную на шаге 2 либо в объекте-получателе события (для уведомлений в фазе получения), либо в одном из предков объекта-получателя (для уведомлений в фазе захвата или в фазе всплытия). Большинство событий мыши обрабатывается приемниками, зарегистрированными в получателе события (то есть в объекте, который концептуально получает данные).

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

var theTextField:TextField = new TextField( ); theTextField. text = «Click here»;

theTextField. autoSize = TextFieldAutoSize. LEFT; theTextField. border = true; theTextField. background = true; theTextField. selectable = false;

Мы осуществляем следующие шаги.

1. Используя информацию в столбце «Описание» табл. 22.1, мы определяем, что константой события щелчка кнопкой мыши является MouseEvent. CLICK.

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

2. Далее мы создаем функцию clickListener ( ), которая будет получать уведомления о возникновении событий MouseEvent. CLICK. Будьте внимательны: типом данных параметра функции clickListener ( ) является MouseEvent.

private function clickListener (e:MouseEvent):void { trace(«Mouse was clicked»);

}

3. Далее в соответствии с информацией в столбце «Получатель» табл. 22.1 мы определяем, что получателем события MouseClick. CLICK является объект InteractiveObj ect, на котором пользователь щелкнул кнопкой мыши. Мы хотим знать, когда щелкают на объекте theTextField, поэтому наш приемник события должен быть зарегистрирован либо в объекте theTextField, либо в одном из его отображаемых предков.

4. Для этого примера мы зарегистрируем приемник clickListener ( ) непосредственно в объекте-получателе TextField — theTextField, как показано в следующем коде:

theTextFi eld. addEventLi stener(MouseEvent. CLICK, cli ckLi stener);

В результате выполнения описанных шагов наш метод clickListener ( ) будет вызываться всякий раз, когда пользователь щелкает кнопкой мыши на объекте theTextField. В листинге 22.1 представлен код, демонстрирующий предыдущие шаги в контексте простого класса ClickableText.

Листинг 22.1. Обработка события MouseEvent. CLICK

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

public class ClickableText extends Sprite { public function ClickableText ( ) { var theTextField:TextField = new TextField( ); theTextField. text = «Click here»;

theTextField. autoSize = TextFieldAutoSize. LEFT; theTextField. border = true; theTextField. background = true; theTextField. selectable = false; addChild(theTextField);

theTextFi eld. addEventLi stener(MouseEvent. CLICK. cli ckLi stener);

}

private function clickListener (e:MouseEvent):void { traceC’Mouse was clicked»);

}

}

}

Все прошло практически без проблем. Рассмотрим другой пример. Следующий код регистрирует приемник mouseMoveListener ( ), выполняющийся всякий раз при перемещении мыши, когда указатель находится над объектом Sprite, на который ссылается переменная triangle.

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

// Создаем треугольник

var triangle:Sprite = new Sprite( );

tri angle. graphi cs.1i neSty1e(1);

triangle. graphics. beginFi 11 (OxOOFFOO, 1);

tri angle. graphi cs. moveTo(25. 0);

triangle. graphics. lineTo(50. 25);

triangle. graphics. lineTo(0. 25);

triangle. graphics. lineTo(25. 0);

triangle. graphics. endFil1( );

triangle. x = 200;

triangle. у = 100;

// Регистрируем приемник в объекте triangle для событий MouseEvent. M0USE_M0VE tri angle. addEventLi stener(MouseEvent. M0USE_M0VE, mouseMoveLi stener);

// …где-то в классе определяем приемник

private function mouseMoveListener (e:MouseEvent):void {

trace(«mouse move»);

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

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

‘ I Объект не сможет получать уведомления о возникновении событий ввода, пока он не 19 будет добавлен в список отображения.

В листинге 22.2 предыдущий код, создающий треугольник, помещается в контекст основного класса MouseMotionSensor SWF-файла. Здесь объект triangle добавляется в список отображения, поэтому может получать уведомления о возникновении событий мыши.

Листинг 22.2. Обработка события MouseEvent. MOUSE_MOVE над треугольником

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

public class MouseMotionSensor extends Sprite { public function MouseMotionSensor ( ) { // Создаем треугольник var triangle:Sprite = new Sprite( ); tri angle. graphi cs.1ineSty1e(1); tri angl e. graphi cs. begi nFi11(OxOOFFOO. 1); triangle. graphics. moveTo(25. 0); tri angle. graphi cs.1ineTo(50. 25); triangle. graphics. lineToCO. 25); triangle. graphics. lineTo(25. 0); triangle. graphics. endFil1( ); triangle. x = 200; triangle. у = 100;

// Добавляем объект triangle в список отображения addChild(triangle);

// Регистрируем приемник в объекте triangle для событий // MouseEvent. M0USE_M0VE

tri angle. addEventLi stener(MouseEvent. M0USE_M0VE, mouseMoveLi stener);

}

private function mouseMoveListener (e:MouseEvent):void {

trace(«mouse move»);

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

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

Упражнение для читателя. Попробуйте добавить новый код в листинг 22.2, который регистрирует приемники для всех событий, перечисленных в табл. 22.1. В качестве шаблона используйте код, описывающий и регистрирующий приемник для события MouseEvent. MOUSE_MOVE. Следующий код, который требуется для регистрации приемника события MouseEvent. MOUSE_DOWN (первое событие, перечисленное в табл. 22.1), поможет вам начать.

// Добавьте этот код. регистрирующий приемник события, в конструктор класса tri anglе. addEventLi stener(MouseEvent. MOUSEJDOWN. mouseDownLi stener);

// Добавьте этот код. описывающий приемник, в тело класса private function mouseDownListener (e:MouseEvent):void { trace(«mouse down»);

}

События мыши и перекрывающиеся отображаемые объекты

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

Например, если объект TextField визуально перекрывает объект Sprite и пользователь щелкает кнопкой мыши на объекте TextField, приложение Flash Player выполняет диспетчеризацию события MouseEvent. CLICK, получателем которого является только объект TextField. Объект Sprite не получает уведомления о том, что произошел щелчок кнопкой мыши.

В листинге 22.3 представлено простое приложение, которое демонстрирует предыдущий сценарий «объект TextField над объектом Sprite». Основной класс приложения ClickSensor регистрирует приемник clickListener ( ) для события MouseEvent. CLICK в объекте Sprite — circle. Объект Sprite частично перекрывается объектом TextField — textfield. Когда вызывается метод clickListener ( ), происходит перемещение объекта circle на 10 пикселов вправо.

Листинг 22.3. Приемник событий мыши, зарегистрированный в частично перекрытом объекте

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

public class ClickSensor extends Sprite { public function ClickSensor ( ) { // Создаем круг

var circle:Sprite = new Sprite( );

ci rcle. graphi cs. begi nFi11 (0×999999. 1);

ci rclе. graphi cs.1ineSty1e(1);

circle. graphics. drawEllipse(0. 0. 100. 100);

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

var textfield;TextField = new TextFieldC );

textfield. text = «Click here»;

textfield. autoSize = TextFieldAutoSize. LEFT;

textfield. x = 30;

textfield. у = 30;

textfield. border = true;

textfield. background = true;

// Добавляем объект circle в список отображения addChild(circle);

// Добавляем объект textfield в список отображения.

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

// поверх объекта circle

addChild(textfield);

// Регистрируем приемник для получения уведомлений. // когда пользователь щелкает кнопкой мыши на круге ci rclе. addEventLi stener(MouseEvent. CLICK, cli ckLi stener);

}

// Обрабатывает события MouseEvent. CLICK, получателем которых является // объект circle.

private function clickListener (e:MouseEvent):void { traceCUser clicked: » + e. target); DisplayObject(e. target).x += 10;

}

}

}

На рис. 22.1 показан результат выполнения кода из листинга 22.3.

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

Рис. 22.1. Результат выполнения приложения ClickSensor

Если при выполнении приложения ClickSensor пользователь щелкнет кнопкой мыши на видимой части объекта circle, этот объект сместится вправо. Но если пользователь щелкнет кнопкой мыши на части объекта circle, которая перекрыта объектом textfield, объект circle не получит уведомления о возникновении события MouseEvent. CLICK и, следовательно, не будет смещен.

Однако существует возможность сделать так, чтобы объект textfield игнорировал любые события мыши, тем самым позволяя объекту circle определять щелчки

кнопкой мыши даже в тех местах, которые перекрыты объектом textfield. Чтобы объект textfield игнорировал все события мыши, мы присваиваем его переменной mouseEnabled значение false, как показано в следующем коде:

textfield. mouseEnabled = false;

Если бы эта строка кода была добавлена в метод-конструктор класса ClickSensor, все щелчки кнопкой мыши, происходящие над любой частью объекта circle, — видимой или невидимой, — приводили бы к перемещению объекта circle вправо.

Когда переменной mouseEnabled экземпляра класса InteractiveObject присвоено значение f al se, этот экземпляр не получает никаких уведомлений о возникновении событий мыши. Вместо этого события мыши отправляются следующему самому верхнему экземпляру класса InteractiveObj ect в списке отображения, для которого включена возможность обработки таких событий.

Определение позиции указателя мыши

Как было рассказано ранее, когда приложение Flash Player вызывает функцию-приемник события мыши, оно передает в эту функцию объект MouseEvent. Он хранит текущую позицию указателя мыши в следующих переменных экземпляра:

? localXHlocalY;

? stageX и stageY.



Полезные ссылки
Случайные записи
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 133
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.82
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 135
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.106
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 041
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 027
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.56
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.20
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 024
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.35
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.52
  • 11.03.2011">Руководство по actionscript. часть 3, стр. 151
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 143
  • 05.03.2010">Галереи креативных логотипов
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 008
Опрос

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

View Results

Loading ... Loading ...