AddChild 仅在重新访问框架时添加到舞台一次
Posted
技术标签:
【中文标题】AddChild 仅在重新访问框架时添加到舞台一次【英文标题】:AddChild to the stage only once when revisiting frame 【发布时间】: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);
【问题讨论】:
【参考方案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 帧代码创建一个新问题,并更详细地说明它应该如何工作以及问题所在。以上是关于AddChild 仅在重新访问框架时添加到舞台一次的主要内容,如果未能解决你的问题,请参考以下文章
当添加到另一个 AS 类文件的舞台时,AS3 访问 MovieClip