Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не удаляет listener (http://www.flasher.ru/forum/showthread.php?t=127922)

ilor 25.07.2009 16:41

Не удаляет listener
 
Код AS3:

var img1:image1 = new image1(0, 0);
var img2:image2 = new image2(0, 0);
 
var mc:MovieClip = new MovieClip();
addChild(mc);
 
var image:Bitmap = new Bitmap(img1);
mc.addChild(image);
 
mc.addEventListener(MouseEvent.CLICK, changeImage);
function changeImage(e:MouseEvent){
        trace("Смена картинки...");
        this.image.bitmapData.draw(img2);
        mc.removeEventListener(MouseEvent.CLICK, changeImage);
}

Не хочет удалять листенер. После клика, картинка меняется на img2,затем через секунду обратно на img1 и прослушка остается активной. Пожалуйста, помогите...

WRC_S 25.07.2009 17:14

если я правильно понил или понимаю, то листнера нельзя удалить из самого себя
mc.removeEventListener(MouseEvent.CLICK, changeImage);-находится внутри листнера который хош удалить!

ilor 25.07.2009 17:28

А как можно исправить?

alekslitvinenk 25.07.2009 18:00

Вставил Ваш код - у меня после клика слушатель удаляется.

ripeLime 25.07.2009 22:41

Цитата:

Сообщение от WRC_S (Сообщение 838151)
если я правильно понил или понимаю, то листнера нельзя удалить из самого себя
mc.removeEventListener(MouseEvent.CLICK, changeImage);-находится внутри листнера который хош удалить!

Вы неправильно поняли.

Попробуйте
Код:

mc.removeEventListener(MouseEvent.CLICK, changeImage);
заменить на
Код:

e.target.removeEventListener(MouseEvent.CLICK, changeImage);

dimarik 26.07.2009 01:09

e.target типа Object и не имеет метода removeEventListener

лучше сделать так

Код AS3:

(event.currentTarget as IEventDispatcher).removeEventListener(event.type, changeImage);


etc 26.07.2009 01:59

dimarik, в таком случае можно отписаться «не там» :)

BlooDHounD 26.07.2009 03:13

etc, а мне кажется как раз-таки именно "там", где подписался.

Gaen 26.07.2009 04:27

Код AS3:

(event.currentTarget as IEventDispatcher).removeEventListener(event.type, arguments.callee);

Гарантированная отписка чего угодно от чего угодно :)

2morrowMan 26.07.2009 13:41

Цитата:

Сообщение от dimarik (Сообщение 838217)
e.target типа Object и не имеет метода removeEventListener

лучше сделать так

Код AS3:

(event.currentTarget as IEventDispatcher).removeEventListener(event.type, changeImage);


Если бы e.target не имело метода removeEventListener, то никаким приведением типов вы его не вызвали бы!


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

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