Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как убрать MovieClip с помощью removeChild (http://www.flasher.ru/forum/showthread.php?t=156682)

username100500 25.05.2011 17:34

Как убрать MovieClip с помощью removeChild
 
У меня есть класс. В нем объявляю popup типа MovieClip.
В MovieClip есть кнопка, при нажатии срабатывает eventlister, в котором я хочу убрать этот MovieClip.
Проблема в том, что при выполнении
Код AS3:

removeChild(popup);

Выдает ошибку.
Через this такая же ошибочка.

Вот что я придумал. Поместить popup еще в какой-то container и через него удалять popup:
Код AS3:

container.removeChild(popup);
                        popup= null;

Но как по мне это быдло-код. Как правильно убрать этот popup?
Спасибо

in4core 25.05.2011 17:52

покажите полный код. По логике

Код AS3:

class 
....
var mc:MovieClip = new Custom(); // has button
mc.button.addEventListener(ME.CLICK , click) ....  function click(e:Event) { removeChild(mc)  // ok }


username100500 25.05.2011 18:08

Код AS3:

public var popup:MovieClip = new MovieClip();
        public function closeWindow(evt:MouseEvent):void {
 
                        removeChild(popup);
                        popup = null;
 
                }
public function Windows_cls()
                {
...........
                        var l:Loader = new Loader();
                        l.load(new URLRequest("http://cdn1.iconfinder.com/data/icons/ose/Error.png"));
                        myRect.addChild(l);
                        l.addEventListener(MouseEvent.CLICK, closeWindow);
                        addChild(popup);
...........                       
 
                }

Вешаю eventlistener на лоадер(в лоадере картинка - кнопка-крестик). В этом наверное ошибка? И как тогда?

DZHETIGAPA 25.05.2011 18:15

Вы бы хоть написали, что за ошибку выдает.

Код AS3:

myRect.addEventListener(MouseEvent.CLICK, closeWindow);


username100500 25.05.2011 18:17

Ой, сорри. Не скопипастил

[Fault] exception, information=ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.

DZHETIGAPA, в MyRect помимо лоадера есть еще элементы. Потому на лоадер и повесил слушатель

DZHETIGAPA 25.05.2011 18:25

Добавь лоадер в какой-нибудь контейнер.

Хотя я всегда жду события COMPLETE.

Код AS3:

var l:Loader = new Loader();
l.load(new URLRequest("http://cdn1.iconfinder.com/data/icons/ose/Error.png"));
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
 
private function onComplete(e:Event):void
{
    myRect.addChild(e.target.content);
    e.target.content.addEventListener(MouseEvent.CLICK, closeWindow);
}


username100500 25.05.2011 19:51

DZHETIGAPA, взял ваш код. listener не срабатывает. Правда в контейнер я не добавлял.
Я не спец во FlashDevelop, но обычно если свойство существует, оно его подсказывает.
target в e подсказало, а вот content - нет.
Не значит ли это, что этого свойства нет

КорДум 25.05.2011 20:03

Код AS3:

(e.target as Loader).content.addEventListener(MouseEvent.CLICK, closeWindow);


username100500 25.05.2011 20:08

О, хоть какой-то прогресс))
[Fault] exception, information=TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

Попробовал повесить слушатель не в onComplete - ничего не происходит - слушатель не срабатывает

DZHETIGAPA 25.05.2011 21:06

Ты лучше напиши код, что ты там делаешь.

goodguy 25.05.2011 21:14

Цитата:

e.target.content.addEventListener(MouseEvent.CLICK, closeWindow);
Вообще, такую конструкцию как раз и можно назвать быдлокодом )

Программе не известно, какой точно тип контента загрузился.
Я бы сначала присвоил это к переменной и привел ее к нужному типу, а уже потом вешал на нее слушатель.
Типа того:
Код AS3:

var image:Bitmap = e.target.content as Bitmap;


DZHETIGAPA 25.05.2011 22:57

Цитата:

Сообщение от goodguy (Сообщение 998778)
Вообще, такую конструкцию как раз и можно назвать быдлокодом )
Программе не известно, какой точно тип контента загрузился.
Я бы сначала присвоил это к переменной и привел ее к нужному типу, а уже потом вешал на нее слушатель.
Типа того:
Код AS3:

var image:Bitmap = e.target.content as Bitmap;


В моем примере была описана суть. Его непонятная ошибка явно не из-за этого.

goodguy 26.05.2011 08:14

ну эта ошибка фиксится просто.
Код AS3:

var myparent:DisplayObjectContainer = parent as DisplayObjectContainer;
if (myparent)  if (myparent.contains(this)) removeChild(this);


username100500 26.05.2011 11:25

Вот, привожу весь код. Слушатель по-прежнему не срабатывает.
Код AS3:

        public class Windows extends MovieClip
        {
                public var popup:MovieClip = new MovieClip();
                private var description:MovieClip = new MovieClip();
                private function create_rect(width:Number=10.0, height:Number=10.0) : Sprite
                {
                        var s:Sprite = new Sprite();
                        s.graphics.lineStyle(0.25, 0x999999, 1.0);
                        s.graphics.beginFill(0xCCCCCC, 1.0);
                        s.graphics.drawRect(0.0, 0.0, width, height);
                        s.graphics.endFill();
 
                        return s;
                }
                public var myRect:Sprite = create_rect(190.0, 190.0);
                public function closeWindow(evt:MouseEvent):void {
                        trace("i was here");
 
                        removeChild(popup);
                        popup = null;
                }
                private function onComplete(e:Event):void
                        {
                                var image:Bitmap = e.target.content as Bitmap;
 
                                image.scaleX = 0.4;
                                image.scaleY = 0.4;
 
                                image.x = myRect.width - 30;
                                image.y = myRect.height - 30;
 
                                myRect.addChild(image);
 
                                image.addEventListener(MouseEvent.CLICK, closeWindow);
 
 
                        }
 
                public var container:MovieClip = new MovieClip();
                public function Windows()
                {
 
                        description.x = 10;
                        description.y = 10;
 
                        var sometext:TextField = new TextField();
                        sometext.text = "Here will locate some desc";
                        sometext.width = 180;
                        sometext.height = 180;
 
                        popup.addChild(myRect);
                        myRect.addChild(description);
                        description.opaqueBackground = 0xFFFFFF;
                        myRect.x = 30;
                        myRect.y = 30;
                        description.addChild(sometext);
                        description.width = sometext.width-description.x;
                        description.height = sometext.height - description.y;
 
                        var l:Loader = new Loader();
                        l.load(new URLRequest("http://cdn1.iconfinder.com/data/icons/ose/Error.png"));
                        l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
 
                        addChild(popup);
 
 
                }
 
        }


fish_r 26.05.2011 11:43

Первая ошибка говорит о том, что вы удаляете то, что не добавляли, этого мувика нет на сцене, похоже.
Вторая ошибка о том, что вы удаляете мувик из контейнера где его нет. Т.е. такой объект есть, но не в этом контейнере
и не факт, что в DisplayList.
Тут не прав.
Если он на сцене все же есть такая инструкция не должна выдать ошибку:
Код AS3:

    mc.parent.removeChild(mc);


username100500 26.05.2011 12:34

Всем спасибо за помощь!
fish_r, ваш код - то, что нужно было.


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

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