Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.09.2015, 08:51
nelco вне форума Посмотреть профиль Отправить личное сообщение для nelco Найти все сообщения от nelco
  № 1  
Ответить с цитированием
nelco
 
Аватар для nelco

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
По умолчанию диспетчеризация событий - как отличать слушателей?

здравствуйте, пытаюсь применить прочитанный материал по диспетчеризации событий и не могу разобраться в правильной архитектуре приложения:
например, в объекте 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 описывать?


Последний раз редактировалось nelco; 19.09.2015 в 11:00.
Старый 19.09.2015, 14:55
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 2  
Ответить с цитированием
neonoviiwolf

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

Старый 19.09.2015, 15:00
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Код 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 ловить их. Но это практически то же самое. Вобщем нужно узнать конкретную ситуацию вашей задумки.

Старый 20.09.2015, 01:20
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
if(e.target == _button1) {
Но у Вас нет никакого объекта _button1
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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