我在第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。
答案 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。