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

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

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
п.2 спасибо, Денис. Там была ошибка по тексту. Исправил.

Баблинг не стал корявым. И тут я ошибся, только в другую сторону: с помощью баблинга вроде как нельзя проинформировать детей.
Так что описаная ситуация невозможна.
Впрочем, я могу ошибаться, не проверял.

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


Последний раз редактировалось etc; 05.03.2008 в 09:07.
Старый 05.03.2008, 08:08
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 12  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Думаю уместно задать здесь свой вопрос.
Читаю справку и блок Constantiner-a
пытаюсь разобраться с Event flow. Я представляю себе это так: есть некий объект из дисплэй листа, сам по себе он никагого события из вне отловить не может (естественно), например, нажатие мыши. Флэш плеер говорит этому объекту, знаешь, дорогой генери такое-то событие. (В АС2 было только так). Но в АС3 это событие исходит не сразу от объекта источника, а движется от среды (Flash Player) к этому объекту. Не спроста есть свойство target, название которого как-то замыливается, но если подумать, почему объект стал целью, если он источник. А вот оказывается, он "цель" для события которое имеет точку входа stage.
Это что касается событий которые "из-вне" (клики, загрузка, девайсы...)
Тут мне все понятно, процессом можно управлять: "пузырить", "не пузырить", прекращать распространение и тд.

Не понятно есть ли какой-то поток событий для событий генерируемых "внутри"? Или тут урезанная программа возможна только стадия пузырька?
Код:
stage.sprite1.sprite2.sprite3.dispatchEvent(new Event("testEvent", true));

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Iv
п.2 спасибо, Денис. Там была ошибка по тексту. Исправил.

Баблинг не стал корявым. И тут я ошибся, только в другую сторону: с помощью баблинга вроде как нельзя проинформировать детей.
Так что описаная ситуация невозможна.
Впрочем, я могу ошибаться, не проверял.

Вообще, что касается событий, я бы сказал, что это штука довольно мощная, однако подходить к использованию событий надо с умом и осторожностью.
Теоретически, все вызовы методов можно заменить событиями, однако этого никто не делает, поскольку это усложняет восприятие логики приложения.
Соответственно есть некая грань, которую нужно довольно четко понимать и думать, а стоит ли использовать именно событие.
Бабблинг работает от ребенка к родителю, да.
Что касается вызовов методов, то я по своему опыту могу сказать, что у меня прямые вызовы методов составляют где-то процентов 30 от всех…

terbooter, не очень понял твой вопрос.

Старый 05.03.2008, 09:19
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 14  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Если коротко, то:
Существует ли поток событий если объект генерит событие с помощью
dispatchEvent

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от terbooter
Если коротко, то:
Существует ли поток событий если объект генерит событие с помощью
dispatchEvent
В смысле бабблинг? Существует, конечно.
Вообще говоря, ничего сложного в работе EventDispatcher нет.

Старый 05.03.2008, 09:26
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 16  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Никак не могу сделать примерчик, где событие генерится dispatchEvent,
а у какого-нибудь слушателя оно отрабатывается при этом target != currentTarget или eventPhase != 2;

Пытаюсь делать так:
Код:
//пишу код прямо в  кадре для быстроты
var s:Sprite=new Sprite();
addChild(s);
s.dispatchEvent(new Event("testEvent",true));

stage.addEventListener("testEvent",testEventHandler);
function testEventHandler(e:Event):void {
    trace(e);
}


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

Регистрация: Sep 2002
Сообщений: 30,787
(кастомный ивент мне было лень писать):
Код:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Dispatcher extends Sprite {
		public function Dispatcher() {
			super();
			super.addEventListener(Event.ENTER_FRAME, this.enterFrameHandler);
		}
		
		private function enterFrameHandler(event:Event):void {
			super.dispatchEvent(new Event('custom', true));
		}
	}
}
Код:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Listener extends Sprite {
		
		public function Listener() {
			super();
			super.addEventListener('custom', this.customHandler);
			super.addChild(new Dispatcher());
		}
		
		private function customHandler(event:Event):void {
			trace(event);
		}
	}
}
На выходе получаем:

Код:
[Event type="custom" bubbles=true cancelable=false eventPhase=3]
[Event type="custom" bubbles=true cancelable=false eventPhase=3]
[Event type="custom" bubbles=true cancelable=false eventPhase=3]
[Event type="custom" bubbles=true cancelable=false eventPhase=3]
[Event type="custom" bubbles=true cancelable=false eventPhase=3]
[Event type="custom" bubbles=true cancelable=false eventPhase=3]
[Event type="custom" bubbles=true cancelable=false eventPhase=3]

Старый 05.03.2008, 09:45
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 18  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Мой пример тоже заработал !
Код:
stage.addEventListener("testEvent",testEventHandler);
function testEventHandler(e:Event):void {
    trace(e);
}
var s:Sprite=new Sprite();
addChild(s);
s.dispatchEvent(new Event("testEvent",true));
Это же волшебно! Теперь не буду париться и для каждого блока контроллеров весить листенер. Все листенеры буду весить прямо на сцену.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от terbooter
Все листенеры буду весить прямо на сцену.
Очень опрометчивое решение.

Старый 05.03.2008, 14:00
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 20  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Прям копи-пастом:
Для передачи событий из View (MVC) удобно использовать bubbling в сочетании со stopPropagation() там, где не требуется дальнейшее всплытие события.
В итоге все события View отлавливаются в Main и далее перенаправляются куда требуется.

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

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

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


 


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


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