【问题标题】:addChild inside MoveClip problemMoveClip 内的 addChild 问题
【发布时间】:2011-10-03 10:33:17
【问题描述】:

我在第 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(slideShow_mc.numChildren) 返回 0。loadSlides 方法中的 trace(numChildren) 也返回 0。

【问题讨论】:

  • 你必须使用时间轴吗? AS+时间线组合始终是 PITA。
  • 我是闪存和一般编程的新手,因此是 as+timeline 组合

标签: flash actionscript-3


【解决方案1】:

移动到另一帧所做的只是从舞台上移除滑块。如果它包含正在接收事件的内部侦听器,那么您需要关闭这些侦听器。您可以尝试在 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多