重新访问框架时,只将AddChild添加到舞台一次

时间:2017-05-24 16:46:34

标签: actionscript-3 if-statement flash-cs6 stage addchild

我有两个框架。

在第一帧中,您可以单击按钮转到下一帧。在第一帧中,我想将menu1添加到舞台上一次。如果我们转到下一帧然后回到第一帧,则不应再次创建menu1,因为它已经在舞台上。

我的问题是,当我从第2帧回到第1帧时,它会不断向舞台添加menu1个副本。

这是我目前的代码:

stop();

import flash.display.Loader;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.display.Stage;

var menu1:Loader = new Loader();
var request1:URLRequest = new URLRequest ("MENU1.swf");
menu1.load(request1);

if (stage.contains(menu1)){

}
else 
{
    addChild(menu1);
}

1 个答案:

答案 0 :(得分:3)

每次都会继续添加菜单的原因是因为您的if条件始终为false

有两行指出为什么会这样:

var menu1:Loader = new Loader();

在上面一行中,您将创建一个全新的Loader()对象并将其分配给var menu1

if (stage.contains(menu1)){

在上面一行中,您正在检查menu1目前是否在舞台上

由于每次访问此帧时第一行都会运行,因此每次都会创建一个全新的对象。该新对象尚未在舞台上存在(前一个对象),因此if条件将始终评估为false

要解决此问题,您可以执行以下操作:

var menu1:Loader; //just define the var here, don't assign anything yet

//if menu1 doesn't have a value
if(!menu1){

    //create a new Loader only if one doesn't exist yet
    menu1 = new Loader();
    var request1:URLRequest = new URLRequest ("MENU1.swf");
    menu1.load(request1);
    addChild(menu1);
}