我已使用此代码将库MovieClip
加载到舞台上:
addChildAt(MC_1, 0);
在此MovieClip
中,我有一些MovieClips
用作按钮。当我按下其中一个按钮时,它会改变颜色(转到第2帧)。
之后,我从舞台上移除了MC_1
,如下所示:
removeChildAt(0);
并加载了与MovieClip
类似的其他MC_1
,如下所示:
addChildAt(MC_2, 0);
问题是,如果我加载另一个MC_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
的控制。