Просмотр полной версии : Вопрос о Listener
Господа! Такая проблема:
есть цикл, который вызывает n-раз функцию... функция аттачит на сцену мувик (т.е. получаем n-мувиков)... внутри этой же функции к мувику addListener(myListener)... myListener также описан и работает на конкретное событие...
а как мне узнать из листенера, который из этих n мувиков именно его вызвал? т.е. узнать его _name ?
совсем запарился уже, блин :wacko:
В смысле к мувику листенер, что это?
Так то у слушателей есть такая вещь как target.
Объясню подробнее:
вот код самого листенера:
var listenerX:Object = new Object();
listenerX.onMotionFinished = function(objectTween:Tween) {
var myFinish:Number = Math.random()*899;
var myDuration:Number = 5+Math.random()*15;
objectTween.continueTo(myFinish,myDuration);
};
вот остальное :
for (var i:Number = 0; i<6; i++) {
makeHex();
}
function makeHex() {
var hexClip:MovieClip = this.attachMovie("hexagon", "mc_hexagon"+i, this.getNextHighestDepth);
hexClip._x = Math.random()*899;
var hexTweenX:Tween = new Tween(hexClip, "_x", Regular.easeOut, hexClip._x, Math.random()*899, 15, true);
hexTweenX.addListener(listenerX);
}
и внутри кода самого листенера мне нужно знать hexTweenX какого из mc_hexagon отработал...
А где создается listenerX? Что мешает подписать на события сам клип?
не совсем понял идеи...разве у клипов есть событие onMotionFinished ?
ListenerX создется не в данной функци..
Вопрос на засыпку: а у абстрактного объекта?
Нет. Но что мешает его объявить у клипа?
мне нужно отследить событие onMotionFinished... у клипа его нет... зачем мне тогда объявлять листенер клипу?
Ещё раз: что мешает сделать это свойство-метод прямо у клипа?
Не надо никаких лишних объектов, каких-то «загадочных» listener-ом (которые являются просто объектом и ничем более).
А ещё в onMotionFinished передается ссылка на Tween, а у него есть свойство obj, ссылающиеся на объект, к которому был применен твин.
Ну так проведите экперимент..
//var listenerX:Object = new Object();
var listenerX:MovieClip = this; и далее без изменений.
Событие такое есть у MovieClipLoader'а, по наступлению этого события он запускает одноименную функцию у всех своих слушателей.
Просто пишем
function onMotionFinished(objectTween:Tween){
//...
}
hexTweenX.addListener( this );
«загадочных» listener-ов
Что макромедам мешало в хелпе нормальный пример привести, непонятно.
2 __etc: а можно подробнее про свойство obj? и если можно то с синтаксисом, т.к. в хэлпе ничего найти не могу про него... (или она где-нибудь, но не в классе tween)
var hexClip:MovieClip = this.attachMovie("hexagon", "mc_hexagon"+i, this.getNextHighestDepth);
hexClip._x = Math.random()*899;
hexClip.onMotionFinished = function() {
trace(this);
}
var hexTweenX:Tween = new Tween(hexClip, "_x", Regular.easeOut, hexClip._x, Math.random()*899, 15, true);
hexTweenX.addListener(hexClip);
сегодня уже попробовать не успею, да и голова замыленная, но простота написанного вдохновляет и поднимает настроение! :)
Всем большое спасибо! :)
работает! _etc, спасибо огромное...
а можете объяснить саму логику данного подхода?
в моем случае создавался листенер, как объект (за пределами цикла, где мы можем обратиться к мувику через hexClip).. А в вашем случае мы описываем функцией событие (но не твина, а мувика)... и... :)
Я просто в качестве «слушателя» использую клип и все. Я не хочу мусорить и гадить, создавая лишние объекты, которые нихрена не делают.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.