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

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

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

Регистрация: Aug 2007
Сообщений: 124
Smile listeners я запутался, помогите понять.

Всем доброго времени суток. Решил вплотную заняться изучением слушателей. И сразу же возникло несколько вопросто на которые в хелпе не могу найти ответов. Почему это работает
Код:
var myListener:Object = new Object();
myListener.click = function(){
trace("button has been pressed"
};
myButton.addEventListener("click", myListener);
а вот это нет
Код:
var myListener:Object = new Object();
myListener.onRollOver = function(){
trace("button has been Rolled Over"
};
myButton.addEventListener("onRollOver", myListener);
Как я мог понять из моих мытаний, слушатели работают только с опредененным набором коман methods. В хелпе написано что для каждого класса свой набор команд которые могут работать со слушателями. Но я не смог их найти. Искал по method Name, хотя бы для Button Class, но там стандартный набор команд как onPress, onRollOver and etc. Но какие из них будут работать со слушателями? Тоже самое с клипами, текстовыми полями и т.д.
Дальше хуже, второе что меня поставило в тупик в чем разница между addListener and addEventListener. Как я понял из книги которую я читаю первый используется в MovieClipLoader Class, но в хелпе, если я не ошибаюсь они используют addListener и в обычных примерах.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
addListener() - можно вызвать у объекта инициализированого AsBroadcaster'ом, что это значит:
когда вы вызываете AsBroadcaster.initialize(myObject), AsBroadcaster создаст массив слушателей (туда можно занести что угодно) и допишет myObject методы addListener, removeListener, broadcastMessage.
Как это будет работать:
когда myObject вызовет broadcastMessage("someString", argument0, ...argumentN), то это будет так же значить, что у всех объектов занесенных в массив _listeners у myObject будет вызван метод someString и в него будут переданы аргументы argument0, ...argumentN.

addEventListener() - можно вызвать у объекта инициализированого EventDispatcher'ом (или EventDispatcherMX). Что это значит:
у myObject будут методы addEventListener, removeEventListener, dispatchEvent. Когда вы вызовете dispatchEvent у myObject то все методы других объектов подписаных на это событие будут вызваны, и им будет передан объект события в качестве аргумента:
пример:
Код:
obj.someMethod = function(evtObj:Object):Void
{
trace(evtObj.target + " : " + evtObj.type);
}
eventDispatcherInstance.addEventListener("someEvent", obj.someMethod);
Это значит, что когда eventDispatcherInstance.dispatchEvent() то у obj будет вызван someMethod(). Но, если честно, то мне реализация EventDispatcherMX не нравится, поэтому я предпочитаю пользоваться своим похожим классом. Но если вы собираетесь использовать ММ компоненты, то, для того, чтобы узнать какие евенты может генерить какой компонент - лезем в иcxодники компонентов =) евенты описаны по-моему так:
[Event("change")]
[Event("click")]
__________________
Hell is the possibility of sanity

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

Регистрация: Aug 2007
Сообщений: 124
to wvxvw: Спасибо за развернутый урок. Поправь меня если я не прав, addListener() не привязан MovieClipLoader Class, а может быть использован и с другими классами.

Старый 23.07.2008, 19:44
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 4  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от solo19770701 Посмотреть сообщение
Почему это работает
... а вот это нет
...
Дальше хуже, второе что меня поставило в тупик в чем разница между addListener and addEventListener. Как я понял из книги которую я читаю первый используется в MovieClipLoader Class, но в хелпе, если я не ошибаюсь они используют addListener и в обычных примерах.
Дело в том, что addEventListener - это пользовательсктий метод класса EventDispatcher, с той лишь разницей, что за вас его написала макромедия (у вас на компе записан файл EventDispatcher.as и прочие).
А addListener - это реальный (встроенный) метод.

Потом, клипы изначально слышат (подписаны на) мышиные события (типа onRollOver), а остальные методы надо еще заставить услышать.


Последний раз редактировалось chingachgoog; 23.07.2008 в 19:49.
Старый 23.07.2008, 20:17
solo19770701 вне форума Посмотреть профиль Отправить личное сообщение для solo19770701 Найти все сообщения от solo19770701
  № 5  
Ответить с цитированием
solo19770701

Регистрация: Aug 2007
Сообщений: 124
to chingachgoog: а как найти какие медоды работают с addEventListener. Попробовал в хелпе забить [Event("change")] или [Event("click")], ничего нету, пишу Event("change"), так там куча ненужного материала. А методом вытка тоже пытаться не хочется.Из книги нашел некоторые методы, как click, itemRollOver, change. Но дело в том что каждый из этих событий привязан к определенному элементу. А к какому какой, вот это мой вопрос. (кроме click, этот уже понятно кому принадлежит)

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если честно, то я не уверен, есть ли такая сборка по всем евентам всех компонентов, но, в принципе, как мне кажется не составит большого труда:
Вы знаете, какой компонент собираетесь использовать ->
идем вот сюда: C:\Program Files\Adobe\Adobe Flash CS3\en\First Run\Classes\mx\controls
например (ну, или куда там Флеш установлен), отыскиваем нужный компонент и смотрим [Event()] тэги.
Ну, только, это, положа руку на сердце... они не хорошие эти компоненты =) Если вы планируете долгосрочную разработку, с последующей поддержкой или просто компилировать чем-то нормальным типа MTASC'а, то головной боли будет гарантировано много от их использования =) А если слепить, отдать и быстро свалить - тогда можно =)

Да, ксати, есть еще и UIEventDispatcher класс (наплодили ж их =)
Вобщем, скорее всего, что все, что наследуется от UIComponent скорее всего использует именно его, а значит в наличие могут быть следующие события:
UIEventDispatcher.keyDown
UIEventDispatcher.keyUp
UIEventDispatcher.load
UIEventDispatcher.mouseDown
UIEventDispatcher.mouseOut
UIEventDispatcher.mouseOver
UIEventDispatcher.mouseUp
UIEventDispatcher.unload

Читать тут:
http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00003641.html

Но, вполне возможно, что их реально больше, да и кроме того, создать еще одно событие вобщем-то не сложно =)


Последний раз редактировалось wvxvw; 23.07.2008 в 22:31.
Старый 23.07.2008, 22:28
solo19770701 вне форума Посмотреть профиль Отправить личное сообщение для solo19770701 Найти все сообщения от solo19770701
  № 7  
Ответить с цитированием
solo19770701

Регистрация: Aug 2007
Сообщений: 124
to wvxvw: понял. Спасибо.

Старый 24.07.2008, 10:33
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 8  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Эти события нужно искать в Components Reference. Например, выбираешь Button component --> Button class --> Event summary. В случае с Button component своих событий он не имеет - событие click наследуется от SimpleButton. С клипами тоже работает.
Можно так создать события:
Код:
var someObject:Object = new Object();
AsBroadcaster.initialize(someObject);

myListener = new Object();
myListener.customRollOver = Delegate.create(this, testMsg);	
movClip.onRollOver = Delegate.create(this, test);
someObject.addListener(myListener);

function testMsg ():Void{
	trace("button has been Rolled Over")
}

function test ():Void{
	someObject.broadcastMessage("customRollOver");
}


Последний раз редактировалось Волгоградец; 24.07.2008 в 10:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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