![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 124
|
Всем доброго времени суток. Решил вплотную заняться изучением слушателей. И сразу же возникло несколько вопросто на которые в хелпе не могу найти ответов. Почему это работает
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);
Дальше хуже, второе что меня поставило в тупик в чем разница между addListener and addEventListener. Как я понял из книги которую я читаю первый используется в MovieClipLoader Class, но в хелпе, если я не ошибаюсь они используют addListener и в обычных примерах. ![]() |
|
|||||
|
Modus ponens
|
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);
[Event("change")] [Event("click")]
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 124
|
to wvxvw: Спасибо за развернутый урок. Поправь меня если я не прав, addListener() не привязан MovieClipLoader Class, а может быть использован и с другими классами.
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
А addListener - это реальный (встроенный) метод. Потом, клипы изначально слышат (подписаны на) мышиные события (типа onRollOver), а остальные методы надо еще заставить услышать. Последний раз редактировалось chingachgoog; 23.07.2008 в 19:49. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 124
|
to chingachgoog: а как найти какие медоды работают с addEventListener. Попробовал в хелпе забить [Event("change")] или [Event("click")], ничего нету, пишу Event("change"), так там куча ненужного материала. А методом вытка тоже пытаться не хочется.Из книги нашел некоторые методы, как click, itemRollOver, change. Но дело в том что каждый из этих событий привязан к определенному элементу. А к какому какой, вот это мой вопрос. (кроме click, этот уже понятно кому принадлежит)
|
|
|||||
|
Modus ponens
|
Если честно, то я не уверен, есть ли такая сборка по всем евентам всех компонентов, но, в принципе, как мне кажется не составит большого труда:
Вы знаете, какой компонент собираетесь использовать -> идем вот сюда: 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. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 124
|
to wvxvw: понял. Спасибо.
|
|
|||||
|
Эти события нужно искать в 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|