在MoveClip内部的addChild问题

时间:2011-07-12 08:36:45

标签: flash actionscript-3

我在第5帧的主时间轴上有一个MovieClip。它被称为“slideShow_mc”。我还有以下代码

function startSlideshow():void {
    slideShow_mc.loadSlides(loadXml.xmlArray);
}

在slideShow_mc中我调用自定义类:

function loadSlides(xml_file:Array):void
{
    var slides:SlideShow = new SlideShow(xml_file);
    addChild(slides);
    slides.x = 0;
    slides.y = 0;
}

如果我转到其他帧,slideShow_mc会消失,但SlideShow类中的trace语句告诉我它仍然存在。我该如何删除它? trace(slideShow_mc.numChildren)返回0. loadSlides方法内的trace(numChildren)也返回0。

1 个答案:

答案 0 :(得分:0)

通过移动到另一个框架所做的一切就是从舞台上移除滑块。如果它包含正在接收事件的内部侦听器,那么您需要关闭它们。您可以尝试在slideShow_mc中侦听removedFromStage事件,然后在滑块上调用destroy函数。

//inside slideShow_mc:
//define slides in a wider scope so we can kill it later:
var slides:SlideShow;
//listen for this container being removed
this.addEventListener(Event.REMOVED_FROM_STAGE,onRemoved);
//load slide function
function loadSlides(xml_file:Array):void
{
    slides = new SlideShow(xml_file);
    addChild(slides);
    slides.x = 0;
    slides.y = 0;
}
//remove handler
function onRemoved(evt:Event):void
{
    this.addEventListener(Event.REMOVED_FROM_STAGE,onRemoved);
    if(slides != null) {
        //call a function in the SlideShow class to kill its internal workings
        slides.destroy();
        //free up the object for gc
        slides = null;
    }
}

显然slides.destroy()是我的猜想。您的类中可能有一个函数关闭其行为,或者您可能必须创建一个函数,它可能不会被命名为destroy。