Форум 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, то никаким приведением типов вы его не вызвали бы!

etc 26.07.2009 13:47

Цитата:

Сообщение от BlooDHounD (Сообщение 838234)
etc, а мне кажется как раз-таки именно "там", где подписался.

А, пардон, у меня белая горячка :wacko:

dimarik 27.07.2009 11:40

Цитата:

Сообщение от 2morrowMan (Сообщение 838262)
Если бы e.target не имело метода removeEventListener, то никаким приведением типов вы его не вызвали бы!

Чудак человек. Парсер ругаться будет на отсутствие у Object метода removeEventListener.

2morrowMan 27.07.2009 14:00

Цитата:

Сообщение от dimarik (Сообщение 838405)
Чудак человек. Парсер ругаться будет на отсутствие у Object метода removeEventListener.

А вот и не будет. :taunt:

P.S. У вас там в, TimeZero, гулянка какая то что ли ? :)

dimarik 27.07.2009 14:10

Ну ладно, уговорил. Object есть динамический класс. Я неправ.


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

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