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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Arrow Прокричать событие "глобально"

Возникла бредовая идея от переизбытка лени, но всё таки спрошу, представьте что есть 10 вложенных друг в друга объектов и самый глубокий диспатчит событие, которое должен услышать самый верхний. Как то можно упростить процедуру диспатчинга или обязательно через точку указывать все объекты вглубь при подписывании объекта на слушатель?

Старый 24.05.2011, 01:03
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
bubble`ing?

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
а поподробнее?)

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
да нет, почему же?

Не так давно с этим боролся =)

Есть объект "кнопка", не важно на каком она уровне, важно что она кнопка и она исполняет какое ни будь действие!

Далее, к примеру, привяжем её к интерфейсу "IButton" в котором укажем для всех объектов "кнопка" метод "function onClick(ar:Function):void;".
Код AS3:
 
// объявим методы в классе "кнопка":
 
function onClick(ar:Function):void
{
    ar.call();
}
 
// после, не важно где, можно в классе "майн"
// привязав линснер к стэйджу задавать такой вопрос:
 
function onMouse (e:MouseEvent):void
{
    if (e.target as IButton) IButton (e.target).onClick(outPut);
}
 
// должна ответить
 
function outPut ():void
{
    trace("onClick");
}
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
так что лисенер в вашем примере надо на stage подписывать или на тот объект в котором эта кнопка где то там находится?

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
нет, только на стэйдж.

Добавлено через 11 минут
Код AS3:
// interface *********************************************
 
package 
{
 
	/**
	 * ...
	 * @author estweet
	 */
	public interface InButton 
	{
		function onClick(ar:Function):void;
	}
 
}
 
// class button ********************************************
 
package
{
	import flash.display.Sprite;
	/**
	 * ...
	 * @author estweet
	 */
	public class MyBytton extends Sprite implements InButton
	{
 
		public function MyBytton() 
		{
			super();
 
			this.mouseChildren = false;
 
			var spr:Sprite = new Sprite();
			spr.graphics.beginFill(0xCCCCCC);
			spr.graphics.drawRect(0, 0, 50, 30);
			addChild(spr);
		}
 
		/* INTERFACE tmpImage.InButton */
 
		public function onClick(ar:Function):void 
		{
			ar.call();
		}
	}
}
 
// class main **********************************************
 
package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author estweet
	 */
	public class TestListener extends Sprite 
	{
 
		public function TestListener() 
		{
			super();
 
			var spr:MyBytton = new MyBytton();
 
			spr.x = 10;
			spr.y = 10;
 
			addChild(spr);
 
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseListener);
		}
 
		private function onMouseListener(e:MouseEvent):void 
		{
			if (e.target as InButton) InButton(e.target).onClick(outPut);
		}
 
		private function outPut ():void
		{
			trace("onClick!");
		}
	}
}
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 24.05.2011, 01:49
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Сообщение от Universe Посмотреть сообщение
а поподробнее?)
В иерархии DisplayList`а это реализовано нативно. Посмотрите второй аргумент у конструктора класса Event.

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Цитата:
Сообщение от Universe Посмотреть сообщение
так что лисенер в вашем примере надо на stage подписывать или на тот объект в котором эта кнопка где то там находится?
Вообще по идее, изначально слушатели только на стэйдже приписаны а далее программисты их перенаправляют, в данном примере более удобный подход к лиснерам. Мне по затылку однажды надавали за то что я лиснеры пихал во все возможные места теперь для любого приложения мне хватает 2-3 штуки на стэйдже.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 24.05.2011, 03:08
DZHETIGAPA вне форума Посмотреть профиль Отправить личное сообщение для DZHETIGAPA Найти все сообщения от DZHETIGAPA
  № 9  
Ответить с цитированием
DZHETIGAPA
[+3 18.04.11]

Регистрация: Dec 2010
Сообщений: 342
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
В иерархии DisplayList`а это реализовано нативно. Посмотрите второй аргумент у конструктора класса Event.
Психо Тигр, допустим я продиспатчил событие в самом глубоком объекте
Код AS3:
dispatchEvent(new Event(Event.CHANGE, true));
А затем в главном родительском объекте просто подписываюсь на это событие? так выходит?

Старый 24.05.2011, 03:39
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 10  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
это событие всплывает дальше по дисплейЛисту Пока в каком-то листенере не пропишешь event.stopPropagation();

Чтоб его услышать выше надо подписаться на какой-то из родителей того кто диспатчил. например:

окна, а окне панель, в панели кнопка, которая диспатчит.

панель подписывается на кнопку.
окно подписывается на панель
а мейн подписывается на окно.

и все они получают одно и то же событие.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

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

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


 


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


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