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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.10.2009, 11:40
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 11  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
Цитата:
Сообщение от TommyLee Посмотреть сообщение
флеш автоматически создает объекты всех событий (клавиатуры, мыши и другие), или только объекты тех событий, которые программист написал через import?
если в коде, где используется класс события, вы не импортируете этот самый класс события - приложение просто не откомпилируется.

Старый 29.10.2009, 12:32
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 12  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Значит, событийные объекты создаются средой флеш. Ясно, меньше ошибок программиста. На каждое событие только один экземпляр событийного объекта?

Старый 29.10.2009, 13:20
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 13  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
читаем

Старый 29.10.2009, 13:35
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 14  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Объект флэш-события создается, видимо, если есть хоть один его слушатель, иначе какой в нем смысл? На этапе компиляции в ролик встраивается код, позволяющий этих слушателей создавать. А импорты просто указывают, что это будет за код.
Цитата:
На каждое событие только один экземпляр событийного объекта?
А какой смысл их множить? Передаем уазатель на объект и все.

Старый 29.10.2009, 13:41
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 15  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от alexcon314 Посмотреть сообщение
Объект флэш-события создается, видимо, если есть хоть один его слушатель, иначе какой в нем смысл?
Цитата:
Сообщение от Felicast Посмотреть сообщение
события на то и события, что им абсолютно по барабану, подписаны на них мильен обработчиков или ни одного. они возникают в любом случае
Я так понял: если усть импорт события, то среда его создаст.

Добавлено через 34 секунды
Цитата:
Сообщение от switcher! Посмотреть сообщение
Спасибо за ссылку, интересно.

Старый 29.10.2009, 13:48
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 16  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от TommyLee Посмотреть сообщение
Значит, событийные объекты создаются средой флеш. Ясно, меньше ошибок программиста. На каждое событие только один экземпляр событийного объекта?
Нет, каждое событие - уникальный объект с примерно такой логикой:
- склонировали объект события.
- записали в него новые target, currentTarget, отдали слушателю.
- если слушатель "остановил" событие, прекращаем его раздавать остальным слушателям.
(В случае с всплывающими событиями, событие можно остановить отдельно, чтобы не всплывало дальше и отдельно, чтобы слушатели того же уровня его не получили).

Да, но с другой стороны, если вам эта реализация кажется избыточной (мне иногда она кажется избыточной ) То никто не мешает переопределить методы типа dispatchEvent() и раздавать не клонированое событие, а один и тот же объект, ну или вообще забить на события и просто вызывать функцую слушателя, если в событиях как таковых нет необходимости.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 29.10.2009 в 13:52.
Старый 29.10.2009, 13:48
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 17  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Хм.. ну, если мувиклип способен реагировать на нажатие мыши, а он способен, код этого класса как раз и создает слушателя нажатий мыши, только происходит это на автомате, хотите вы этого или нет, ибо такой класс. Среда ему эти события будет исправно предоставлять. В вашей терминологии "импорт события" это импорт класса, создающего слушателя данного события. А дальше - уже логика обработки. И тут уже неважно, есть ли слушатели этого события в последующей цепочке, то бишь подписался кто-то на событие клипа или не подписался.


Последний раз редактировалось alexcon314; 29.10.2009 в 14:00.
Старый 29.10.2009, 15:52
TommyLee вне форума Посмотреть профиль Отправить личное сообщение для TommyLee Найти все сообщения от TommyLee
  № 18  
Ответить с цитированием
TommyLee

Регистрация: Sep 2009
Сообщений: 130
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Нет, каждое событие - уникальный объект с примерно такой логикой:
.........
То есть, например, на каждый клик создается свой событийный объект? Нет такого: среда создала событийный объект; произошел щелчок мыши - среда поместила его в этот объект; кто на него подписан - получил и обработал; дальше опять щелчок - среда поместила это событие в тот же объект (перезаписала) и так по новой.. Получается, ваш вариант с переопределением EventDispatcher.

Цитата:
Сообщение от alexcon314 Посмотреть сообщение
В вашей терминологии "импорт события" это импорт класса, создающего слушателя данного события.
Я пока путаюсь в терминологии, т.к. у перевода Мука и в руководстве она разная, к тому же не уверен, что правильно понял событийную модель. Я имел вот что: например, import MouseEvent. Теперь, если среда флеш получит мышиное событие, она создаст экземпляр класса MouseEvent. Который, в свою очередь, пойдет всем подписчикам.


Последний раз редактировалось TommyLee; 29.10.2009 в 18:00.
Старый 29.10.2009, 19:52
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 19  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
флеш получит мышинное событие в любом случае. в сотый раз говорю: ему абсолютно плевать, слушает кто его или нет. и даспатчЕвент сработает. просто если подписчиков нет, то никуда это событие и не пойдет.
насчет import MouseEvent: это тоже ни на что не влияет. эта строчка нужна для того чтобы вы в коде могли использовать класс MouseEvent (к слову сказать, этот класс нативный (находится в самом плеере)

зы: вчитываясь с комменты, создается такое впечатление, что каждый говорит о своем


UPD: даже не пожалел времени набросал как примерно работает EventDispatcher (реализация может и не такая, но идея должна быть понятна)
Код AS3:
public class EventDispatcher
{
	private var _events:Dictionary;
	public function EventDispatcher()
	{
		_events = new Dictionary();
	}
	public function addEventListener(eventType:String, eventHandler:Function):void
	{
		var eventsList:Array = _events[eventType];
		if (!eventsList)
		{
			eventsList = new Array();
			_events[eventType] = eventsList;
		}
		eventsList.push(eventHandler);
	}
	public function dispatchEvent(event:Event):void
	{
		var eventsList:Array = _events[eventType];
		if (eventsList)
		{
			for each (var handler:Function in eventsList)
			{
				handler(event);
			}
		}
	}
}
__________________
я могу стать всем, если только захочу


Последний раз редактировалось Felicast; 29.10.2009 в 20:02.
Старый 29.10.2009, 19:59
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 20  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от TommyLee Посмотреть сообщение
Я имел вот что: например, import MouseEvent. Теперь, если среда флеш получит мышиное событие, она создаст экземпляр класса MouseEvent. Который, в свою очередь, пойдет всем подписчикам.
Нет, import просто указывает компилятору, что данный класс используется в коде и позволяет получить к нему доступ без указания пакета. Можно обойтись и без импорта, но в этом случае всё время придётся вместо MouseEvent писать flash.events.MouseEvent.

Диспетчер (в том числе то, что вы называете "среда") рассылает события всем подписчикам, вне звависимости от того, произведён ли в их коде импорт соответствующего класса. А то, на какое событие слушатель подписан, определяется не классом события, а строкой, которая была передана в качестве параметра type метода addEventListener (и доступна через Event.type).

Например, мы можем подписаться на MouseEvent.MOUSE_DOWN, а параметр метода-слушателя объявить как e:Event. И события будут приходить всё равно, более того, не возникнет никаких ошибок (так как MouseEvent наследует Event). Мы просто не сможем получить доступ к свойствам и методам, определённым непосредственно в MouseEvent (localX, например).


Последний раз редактировалось SamFR; 29.10.2009 в 20:05.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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