删除运行时加载的MC

时间:2014-02-19 12:19:28

标签: actionscript-3 flash

我已使用此代码将库MovieClip加载到舞台上:

addChildAt(MC_1, 0);

在此MovieClip中,我有一些MovieClips用作按钮。当我按下其中一个按钮时,它会改变颜色(转到第2帧)。

之后,我从舞台上移除了MC_1,如下所示:

removeChildAt(0);

并加载了与MovieClip类似的其他MC_1,如下所示:

addChildAt(MC_2, 0);

问题是,如果我加载另一个MC_1,按下的最后一个按钮仍然是彩色的。

如何从内存中完全卸载它?

1 个答案:

答案 0 :(得分:1)

显然您没有加载另一个 MC_1,而是添加MC_1引用的相同实例。 “加载”一个影片剪辑不只是添加,它也是实例化,为此,您调用MC_1 = new Something();。因此,为了添加一个在库中具有原型的全新影片剪辑,您必须通过放置MC_1 = new Something()来重新实例化您使用的变量,其中Something是影片剪辑的名称图书馆。

您还可以采用不同的方法:为原型提供一个对Event.REMOVED_FROM_STAGE事件做出反应的函数,这将使MC中的所有按钮将其状态更改为默认值。像这样:

public class Something extends MovieClip {
    // any other functionality is here
    public function Something() {
        // ...
        addEventListener(Event.REMOVED_FROM_STAGE,resetMC);
    }
    private function resetMC(e:Event):void {
        button_1.gotoAndStop(1); // make sure to place proper name of buttons
        ... // place one gotoAndStop() call per button you want to switch back
    }
}

然后,只要您执行removeChild(MC_1),此代码就会启动,使所有MC_1的按钮(以及resetMC()函数中引用的所有按钮)成为显示相应的框架(此处,button_1将显示第一帧)。这种方法通常更好,因为您不会使新实例出现在内存中,因此您可以保留对当前MC_1的控制。