Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ошибка при само-удалении объекта (http://www.flasher.ru/forum/showthread.php?t=211727)

tattori 22.10.2015 21:12

ошибка при само-удалении объекта
 
на сцене мувик "sdsd"
вот при таком коде
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
 
        public class sdsd extends MovieClip {
 
 
                public function sdsd() {
 
                                parent.removeChild(this);
 
                }
        }
 
}

удаляет там себя, но как только удаляю так
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
 
        public class sdsd extends MovieClip {
 
 
                public function sdsd() {
                        var tom:Timer = new Timer(100,1);
                        tom.start()
                        tom.addEventListener(TimerEvent.TIMER,go);
                        function go(event:TimerEvent):void
                        {
 
 
                                parent.removeChild(this) as DisplayObject;
                        }
                }
        }
 
}

выдает ошибку
TypeError: Error #1034: Type Coercion failed: cannot convert global to flash.display.DisplayObject.
кто нибудь сталкивался с таким? в чем проблема?

alexandrratush 22.10.2015 21:16

Во втором варианте this имеет совсем другое значение, потому слушатель анонимный. Сделайте слушатель методом класса, и все будет норм.

Dmitriy154 22.10.2015 21:21

может надо в функции обработчике таймера писать не this, а переменную, до этого определнную в конструкторе var mk: MovieClip =this...

tattori 22.10.2015 21:25

извиняюсь код чуток не тот код прислал
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
 
        public class sdsd extends MovieClip {
 
 
                public function sdsd() {
                        var tom:Timer = new Timer(100,1);
                        tom.start()
                        tom.addEventListener(TimerEvent.TIMER,go);
                        function go(event:TimerEvent):void
                        {
 
 
                                parent.removeChild(this);
                        }
                }
        }
 
}

вот так
alexandrratush примером кода если можно, че то не совсем догнал

Добавлено через 18 минут
ааааааааа всеее, че то это я туплю все очень даже классно объяснил)) спасибо))

caseyryan 23.10.2015 08:46

Цитата:

Сообщение от tattori (Сообщение 1188305)
на сцене мувик "sdsd"
вот при таком коде
Код AS3:

package  {
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
 
        public class sdsd extends MovieClip {
 
 
                public function sdsd() {
 
                                parent.removeChild(this);
 
                }
        }
 
}

удаляет там себя, но как только удаляю так

Да не может он таким кодом сам себя удалять никак.
sdsd в данном случае является конструтором. То есть на момент создания экземпляра, у него никак не может быть родителя. И этот код кинет ошибку сразу же при запуске.

tattori 24.10.2015 18:56

Цитата:

Сообщение от caseyryan (Сообщение 1188328)
Да не может он таким кодом сам себя удалять никак.
sdsd в данном случае является конструтором. То есть на момент создания экземпляра, у него никак не может быть родителя. И этот код кинет ошибку сразу же при запуске.

мувик вручную выставлен на сцену, удаляет

meiciuc 26.10.2015 13:15

тут вот товарищ выше ответил уже: "Во втором варианте this имеет совсем другое значение, потому слушатель анонимный. Сделайте слушатель методом класса, и все будет норм."

Т.е. - this внутри АНОНИМНОЙ функции уже не ссылается на экземпляр класса. Если использовать анонимную функцию, как в вашем коде, то ей надо в явном виде передать ссылку на класс.

Код AS3:

public class sdsd extends MovieClip {
 
 
                public function sdsd() {
                        var tom:Timer = new Timer(100,1);
                        tom.start()
                        tom.addEventListener(TimerEvent.TIMER,go);
 
                        var itsMe:sdsd = this;
 
                        function go(event:TimerEvent):void
                        {
 
                                trace(itsMe)
                                trace(this)
                                //parent.removeChild(this);
                                parent.removeChild(itsMe)
                        }
                }
        }


cleptoman 26.10.2015 16:13

еще бы таймер остановить..

tattori 29.10.2015 22:32

meiciuc спасибо за пример , да товарищ все классно объяснил.

Добавлено через 47 секунд
cleptoman у таймера выставлен один цикл, он сам остановится

alexandrratush 30.10.2015 00:34

Оффтоп: я там забыл одно слово вставить, из-за этого предложение глупо звучит. Вот так лучше:
Во втором варианте this имеет совсем другое значение, потому что слушатель анонимный. Сделайте слушатель методом класса, и все будет норм.
:)


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

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