Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   никак не могу removeEventListener (http://www.flasher.ru/forum/showthread.php?t=111889)

me2 12.05.2008 02:38

никак не могу removeEventListener
 
Вот такая вот конструкция лежит в классе:
Код:

private var act;
...
private function addFrameEvent(){
        act=function(e:Event){trace('aaa')}
        addEventListener(Event.ENTER_FRAME,act);
}
private function killFrameEvent(){
        removeEventListener('enterFrame',act);
}

Не могу удалить listener. Что не так?

koresh& 12.05.2008 02:45

Код:

removeEventListener(Event.ENTER_FRAME,act);
м?

me2 12.05.2008 02:49

не помогает
он походу не хочет понимать что act является объектом-слушателем...

koresh& 12.05.2008 02:56

Код:

private var act;
...
private function addFrameEvent(){
        addEventListener(Event.ENTER_FRAME,act);
        function act(e:event)
        {
            trace('aaa')
        }
}
private function killFrameEvent(){
        removeEventListener(Event.ENTER_FRAME,act);
}

а ничего, что они private?

me2 12.05.2008 03:05

это не страшно :)

wvxvw 12.05.2008 03:08

А вы не создавайте слушателей, да и функции вообще в теле другой функции (ибо все ссылки на них потруться когда функция отработает), и будет вам счастье =)
Вот как вы себе представляете, вы создали локальную переменныю в функции А, а в функции Б хотите теперь ее увидеть? Переменная должна быть в зоне видимости обеих функций.

me2 12.05.2008 03:17

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

wvxvw 12.05.2008 03:23

Ну вот и не нужно делать "быстро", а нужно хорошо =) Не сможете вы из одной функции добраться до локальной переменной другой функции... это как пересечение параллельных прямых =) Объявите act вне первой функции, и все будет замечательно работать.

addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false)
Соответственно, поменять на true
Это на всякий случай. Не самый лучий вариант, т.как слушатель будет удален безконтрольно, но тоже может пригодиться.

me2 12.05.2008 03:26

Блин, короче мне дико стыдно, всё работает. Полуношная паника была зря, просто пытался удалить ещё не созданную лису.

me2 12.05.2008 03:32

wvxvw: А кстати переменная ведь объявленна вначале класса, область видимости позволяет лазать к ней через разные функции, это примерно... как дохлая корова на параллельных рельсах, полюбому доступ есть


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

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