PDA

Просмотр полной версии : Вопрос о Listener


Ведьмак
06.07.2007, 21:24
Господа! Такая проблема:

есть цикл, который вызывает n-раз функцию... функция аттачит на сцену мувик (т.е. получаем n-мувиков)... внутри этой же функции к мувику addListener(myListener)... myListener также описан и работает на конкретное событие...

а как мне узнать из листенера, который из этих n мувиков именно его вызвал? т.е. узнать его _name ?

совсем запарился уже, блин :wacko:

CorC
06.07.2007, 21:31
В смысле к мувику листенер, что это?
Так то у слушателей есть такая вещь как target.

Ведьмак
06.07.2007, 21:52
Объясню подробнее:

вот код самого листенера:
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 отработал...

etc
06.07.2007, 22:05
А где создается listenerX? Что мешает подписать на события сам клип?

Ведьмак
06.07.2007, 22:17
не совсем понял идеи...разве у клипов есть событие onMotionFinished ?

ListenerX создется не в данной функци..

Kikasso
06.07.2007, 22:20
Вопрос на засыпку: а у абстрактного объекта?

etc
06.07.2007, 22:21
Нет. Но что мешает его объявить у клипа?

Ведьмак
06.07.2007, 22:33
мне нужно отследить событие onMotionFinished... у клипа его нет... зачем мне тогда объявлять листенер клипу?

etc
06.07.2007, 22:41
Ещё раз: что мешает сделать это свойство-метод прямо у клипа?
Не надо никаких лишних объектов, каких-то «загадочных» listener-ом (которые являются просто объектом и ничем более).
А ещё в onMotionFinished передается ссылка на Tween, а у него есть свойство obj, ссылающиеся на объект, к которому был применен твин.

Kikasso
06.07.2007, 22:44
Ну так проведите экперимент..
//var listenerX:Object = new Object();
var listenerX:MovieClip = this; и далее без изменений.
Событие такое есть у MovieClipLoader'а, по наступлению этого события он запускает одноименную функцию у всех своих слушателей.

Просто пишем
function onMotionFinished(objectTween:Tween){
//...
}
hexTweenX.addListener( this );

«загадочных» listener-ов
Что макромедам мешало в хелпе нормальный пример привести, непонятно.

Ведьмак
06.07.2007, 22:55
2 __etc: а можно подробнее про свойство obj? и если можно то с синтаксисом, т.к. в хэлпе ничего найти не могу про него... (или она где-нибудь, но не в классе tween)

etc
06.07.2007, 22:56
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);

Ведьмак
06.07.2007, 23:12
сегодня уже попробовать не успею, да и голова замыленная, но простота написанного вдохновляет и поднимает настроение! :)

Всем большое спасибо! :)

Ведьмак
07.07.2007, 13:24
работает! _etc, спасибо огромное...

а можете объяснить саму логику данного подхода?
в моем случае создавался листенер, как объект (за пределами цикла, где мы можем обратиться к мувику через hexClip).. А в вашем случае мы описываем функцией событие (но не твина, а мувика)... и... :)

etc
07.07.2007, 13:59
Я просто в качестве «слушателя» использую клип и все. Я не хочу мусорить и гадить, создавая лишние объекты, которые нихрена не делают.