【问题标题】:AddChild to the stage only once when revisiting frameAddChild 仅在重新访问框架时添加到舞台一次
【发布时间】:2017-10-25 03:29:40
【问题描述】:

我有两个框架。

在第一帧中,您可以单击按钮转到下一帧。在第一帧中,我只想将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);
}

【问题讨论】:

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


    【解决方案1】:

    它每次仍然不断添加菜单的原因是因为您的 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);
    }
    

    【讨论】:

    • 它就像一个魅力,但现在出现的问题是当从第 2 帧到第 1 帧时,第 2 帧的 swf 与第 1 帧重叠。按钮也是如此
    • 你好,为什么我回来后我的对象没有出现?真的很混乱
    • 我建议使用您的第 2 帧代码创建一个新问题,并更详细地说明它应该如何工作以及问题所在。
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多