Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   диспетчеризация событий - как отличать слушателей? (http://www.flasher.ru/forum/showthread.php?t=211549)

nelco 19.09.2015 08:51

диспетчеризация событий - как отличать слушателей?
 
здравствуйте, пытаюсь применить прочитанный материал по диспетчеризации событий и не могу разобраться в правильной архитектуре приложения:
например, в объекте Sprite лежат 2 текстовых поля и 2 слушателя для событий MouseEvent.CLICK
Код AS3:

 
package as3Tutorial.scr.tempClasses
{
 
        public class TestEvents extends Sprite
        {        public var _container:Sprite = new Sprite();
                public var _textField1:TextField = new TextField();
                public var _textField2:TextField = new TextField();
 
                public function TestEvents()
                {
                        _textField1.text = "button1";
                        _textField1.textColor = 0x00FFFF;
                        _textField2.text = "button2";
                        _textField2.textColor = 0x00FFFF;
                        _textField2.x = 300;
 
                        _container.addChild(_textField1);
                        _container.addChild(_textField2);
                        addChild(_container);
 
                        _textField1.addEventListener(MouseEvent.CLICK, clickListener);
                        _textField2.addEventListener(MouseEvent.CLICK, clickListener);
 
 
                }
 
                private function clickListener(e:MouseEvent):void
 
                {
                        if (e.currentTarget == _textField1) {
                                trace ("_textField1 click");
                        }
                        if (e.currentTarget == _textField2) {
                                trace ("_texField2 click");
                        }
                }
 
        }
 
}

в Main.as создаю экземпляр этого класса TestEvents
Код AS3:

 
        public class Main extends Sprite
        {
                private var _testEvents:TestEvents = new TestEvents();
 
                public function Main()
                {
 
                addChild(_testEvents);
                addEventListener(MouseEvent.CLICK, clickListener);
 
                }
 
                private function clickListener(e:MouseEvent):void
                {
                        if(e.target == _button1) {
 
                          trace ("нажата кнопка 1 в объекте TestEvents")
 
                            }
 
                      if (e.target ==_button2) {
 
                        trace ("нажата кнопка 2 в объекте TestEvents")
 
                            }
  }
}

мне нужно, например, чтобы при щелчке мыши на объекте TestEvents создавался новый объект DOC в Main.as (всплывающее окно), который грузил бы в себя кучу DisplayObjectoв

мне нужно в Main.as подписываться на все события MouseEvent.CLICK от всех контейнеров и потом используя switch(e.target) отличать эти все события приходящие из разных объектов друг от друга по e.target или e.name?

а если этих событий будет 100 штук, то их все обрабатывать в Main.as получается надо будет в одной и той же функции-обработчике события MouseEvent.CLICK? если ещё эти 100 событий будут из разных классов-DOC-ов и у них будут разные типы событий, то всё это в Main.as описывать?

neonoviiwolf 19.09.2015 14:55

а почему бы не описывать в том классе, где они нужны?
а вообще вопрос лучше переформулируйте, у меня голова заболела, пытаясь осилить ваш текст

samana 19.09.2015 15:00

Код AS3:

мне нужно, например, чтобы при щелчке мыши на объекте TestEvents создавался новый объект DOC в Main.as

Немного не понятно, в чём загвоздка. Тогда вам нужно подписать именно _testEvents (находящийся в Main) на клик мышки. А в методе _testEvents_clickListener уже создавать всплывающее окошко.
Код AS3:

_testEvents.addEventListener(MouseEvent.CLICK, _testEvents_clickListener);

Цитата:

мне нужно в Main.as подписываться на все события MouseEvent.CLICK от всех контейнеров и потом используя switch(e.target) отличать эти все события приходящие из разных объектов друг от друга по e.target или e.name?
Можно и так, смотря какая ситуация в данный момент будет удобна. Но в любом случае, если у вас в Main 100 объектов, и вы хотите, чтобы при клике на каждом их них выполнялось особенное действие именно в Main, то без подписок на MouseEvent.CLICK не обойтись. Либо диспатчить событие из каждого кликнутого объекта и в Main ловить их. Но это практически то же самое. Вобщем нужно узнать конкретную ситуацию вашей задумки.

Wolsh 20.09.2015 01:20

Цитата:

if(e.target == _button1) {
Но у Вас нет никакого объекта _button1


Часовой пояс GMT +4, время: 20:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.