Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Sptite and EventListener ADDED (http://www.flasher.ru/forum/showthread.php?t=114487)

SSergeyS 30.07.2008 16:32

Sptite and EventListener ADDED
 
Есть спрайт в который время от времени добавляются объекты.
При добавлении или изменении объекта в этом спрайте надо вызвать событие.
Пробовал слушать события:ADDED, CANCEL, COMPLETE, RENDER, RESIZE.
Все кроме ADDED молчат на изменения или добавления в существующий объект новый объектов.
А ADDED зацикливается вызывая событее тучу раз.
Код:

tSource.addEventListener(Event.ADDED,refScroll);
public function refScroll(e:Event):void{
...                                                                                                       
}

addChild в tSource и его детей происходит из разных компонентов но не часто(проверял не один раз). А дебаггер вылетает с ошибкой о зацикливании.
Может кто-нибуть разъяснить почему вылетает и какое событие правильней слушать EventListener-ом на изменения в спрайте или мувиклипе?

etc 30.07.2008 16:46

Скорее всего вы создали рекурсию своим кодом, вот и всё.

SSergeyS 30.07.2008 17:32

Я понимаю что создал рекурсию.
Так-как при пере добавлении tSource на сцену сново вызывается событие ADDED. Но вопрос в том как повесить EventListener чтобы он вызывался только для изменений внутри объекта (для всех его детей и детей их детей ) а не при добавлении самого объекта. Пока делаю removeEventListener перед пере добавлением, но в моем случае это костыль.

wvxvw 30.07.2008 17:39

Ну наверное:
Код:

if (evt.currentTarget == evt.target)
{
trace("This is our sprite, don't do anything!");
}


BlooDHounD 30.07.2008 19:01

wvxvw, тогда событие вызовется, если добавился сам клип, а не его дети :)
Код:

if ( ( event.target as DisplayObject ).parent === event.currentTarget ) {
trace("This is our sprite, don't do anything!");
}


wvxvw 30.07.2008 19:48

Ок, не было возможности проверить =)
ЗЫ. а зачем === ?

BlooDHounD 31.07.2008 00:54

wvxvw, долго объяснять. в общем можешь считать "чтоб наверняка", а на будущие все объекты сравнивай именно так. только простые типы сравнивай обычным равно.

DarkLight 31.07.2008 02:12

А еще, насколько я помню, === быстрее работает=)

terbooter 31.07.2008 10:14

BlooDHounD, давно хотел разобраться с тождественным равенством.
Можно пример/где прочитать почему нужно использовать === вместо ==

BlooDHounD 31.07.2008 10:23

DarkLight, ага. потому что он сравнивает адреса в памяти.
terbooter, в хелпе много букф. не поймёте - приходите расскажу.


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

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