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

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

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

Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
По умолчанию Реализация всплытия для не DisplayObject

Как можно реализовать систему всплытия для не DisplayObject? Конкретно интересует такой момент:
Есть иерархия объектов с 3-4 уровневой вложенностью, необходимо, чтобы родитель мог подписаться на события "внуков" и "правнуков".
__________________
Я просто добрый шутник.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Дедушка слушает сына, сын слушает своего сына?
__________________
тут я

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

Регистрация: Jun 2008
Адрес: курский вокзал
Сообщений: 1,114
Сейчас так и сделано.Тогда так, это единственный путь решения?Родитель подписывается на ребенка и шлет выше. Я просто не знаю, как устроен этот механизм в DisplayObject, где бы почитать про это.
__________________
Я просто добрый шутник.

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Можно создать массив в котором хранятся ссылки на объекты всей ветки, от корня до конца. В переопределенном методе dispatchEvent при bubbles=true обходится массив начиная от event.target и диспатчится тоже событие.

Старый 20.03.2011, 13:53
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Какой массив? Зачем массив?

наследуем детей от этого кода вместо EventDispatcher-а и при добавлении в невизуальный контейнер выставляем у них eventParent на этот контейнер - при удалении зануляем

Код AS3:
package
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
 
	public class EventDispatcherWithBubbles extends EventDispatcher
	{
		protected var _eventParent:IEventDispatcher;
 
		public function EventDispatcherWithBubbles()
		{
                       super(this);
		}
 
		public function set eventParent(value:IEventDispatcher):void
		{
			_eventParent = value;
		}
 
		public function get eventParent():IEventDispatcher
		{
			return _eventParent;
		}
 
		override public function dispatchEvent(event:Event):Boolean
		{
			var dispatchResult:Boolean = super.dispatchEvent(event);
			if (_eventParent != null)
			{
				_eventParent.dispatchEvent(event);
			}
			return dispatchResult;
		}
	}
}
В контейнере детей можно еще рассылать события ADDED и REMOVED при необходимости


Последний раз редактировалось expl; 20.03.2011 в 14:40.
Старый 20.03.2011, 14:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
expl, в таком варианте событие будет клонироваться при каждом dispatchEvent.

Старый 20.03.2011, 14:12
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
я делал
Код AS3:
if(parent && event.bubbles)
parent.dispatchEvent(event)
уже опередили, пока писал.
Цитата:
в таком варианте событие будет клонироваться при каждом dispatchEvent.
А в чём проблема?
должен ведь смениться currentTarget
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 20.03.2011 в 14:28.
Старый 20.03.2011, 14:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
expl, в таком варианте событие будет клонироваться при каждом dispatchEvent.
Разве при вызове dispatchEvent оно клонируется. Это какая-то ерунда получается:
Код AS3:
dispatchEvent(new Event(Event.CHANGE));// Один раз создали и еще один раз склонировали?
Да, кстати currentTarget в моём подходе вообще не учитывается - без него как-то обходился

Проверил, НЕ клонируется.

Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.errors.IllegalOperationError;
	import flash.events.Event;
	import flash.events.EventDispatcher;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			var object0:EventDispatcherWithBubbles = new EventDispatcherWithBubbles();
			var object1:EventDispatcherWithBubbles = new EventDispatcherWithBubbles();
			object1.eventParent = object0;
 
			object0.addEventListener(Event.CHANGE, onChange);
			_event = new Event(Event.CHANGE);
			object1.dispatchEvent(_event);
		}
 
		private var _event:Event;
 
		private function onChange(event:Event):void
		{
			if (_event !== event)
			{
				throw new Error("_event mast be equals event");// НЕ падает
			}
		}
	}
 
}


Последний раз редактировалось expl; 20.03.2011 в 14:33.
Старый 20.03.2011, 14:25
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Если у события не совпадает хозяин и корреспондент - то при рассылке клонируется вроде.
__________________
Отряд Котовскага

Старый 20.03.2011, 14:31
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код AS3:
var e:Event = new Event(Event.COMPLETE);
var s:Sprite = new Sprite();
super.addEventListener(Event.COMPLETE, handler);
s.addEventListener(Event.COMPLETE, handler2);
 
function handler(event:Event):void {
	trace(e === event, event.target); // true [object MainTimeline]
	s.dispatchEvent(event);
}
 
function handler2(event:Event):void {
	trace(e === event, event.target); // false, [object Sprite]
}
 
super.dispatchEvent(e);

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

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

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


 


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


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