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 仅在重新访问框架时添加到舞台一次的主要内容,如果未能解决你的问题,请参考以下文章

正确使用 addChild

当添加到另一个 AS 类文件的舞台时,AS3 访问 MovieClip

舞台上的对象在跳转到它们的框架时不会被读取

cocos2d.js

仅在 html 代码中使用 javascript 重新加载特定页面一次

仅在 Android(Ionic 框架)上重新启动手机时,所有预定通知会立即显示