我在第5帧的主时间线上有一个名为"slideShow_mc“的MovieClip。我还有以下代码
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(slideShow_mc.numChildren)返回0。loadSlides方法中的trace(numChildren)也返回0。
发布于 2011-07-12 16:51:12
通过移动到另一个帧,您所做的就是从舞台上移除滑块。如果它包含正在接收事件的内部侦听器,则需要关闭这些侦听器。您可以尝试侦听slideShow_mc中的removedFromStage事件,然后在滑块上调用销毁函数。
//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。
https://stackoverflow.com/questions/6661488
复制相似问题