如何使 removeChild() 像 unloadAndStop() 一样工作?

Posted

技术标签:

【中文标题】如何使 removeChild() 像 unloadAndStop() 一样工作?【英文标题】:How can I make removeChild() work like unloadAndStop()? 【发布时间】:2017-04-11 01:24:57 【问题描述】:

我正在使用适用于 ios 的 Flash 和 Air 构建一本“交互式书籍”,并且几乎没有 AS3 经验...

我曾计划将“页面”作为外部 SWF 加载,然后使用 unloadAndStop 清除它们 - 这样每次用户“翻页”时,加载的 SWF 以及这些页面中的嵌套迷你游戏都会“新鲜”播放首次。好吧 - 显然,重新加载的 SWF 对于 AIR 和 iOS 来说是不行的。

我想我只能用内部 MC 替换那些外部 SWFS 并使用 AddChild / RemoveChild - 但这不会重置变量,因此迷你游戏可以新鲜玩,而且我有点太绿了,不知道更好的解决方案。

有什么方法可以增强 RemoveChild 的功能,让 MC 每次上台时都会加载“新鲜”?

【问题讨论】:

到目前为止你尝试过什么? 您的“互动书”是否免费供所有人使用?如果是,你会在哪里发布? 【参考方案1】:

如果您按时间线添加影片剪辑,只需从属性面板重命名其实例名称,然后在该帧中创建新的 MovieClip 实例。

如果你想通过AS3添加它,你必须先为其设置一个链接,一个以字母开头的类名(推荐大写字母)

然后:

var mc:MovieClip = new Game1();
addChild(mc);

当您删除它时,使用刷新的属性再次添加它(如您所说) 你必须这样做:

mc = new Game1(); // make a new instance of Game1
addChild(mc);

编辑

注意:为了节省性能,在调用removeChild 后冻结你的movieclip 并通过删除它的eventListeners 使其准备好进行垃圾处理,不要害怕:d 看看this 和this (我只是通过快速搜索找到这个参考,但我现在它们很有帮助)

【讨论】:

诸神!那行得通!谢谢,帕亚姆! (我仍然不是 100% 了解垃圾清除,但我现在会更深入地研究!)非常非常感谢!

以上是关于如何使 removeChild() 像 unloadAndStop() 一样工作?的主要内容,如果未能解决你的问题,请参考以下文章

使用DOM.removeChild()删除元素后,如何使用GWT添加元素?

带有 removeChild 的 Chrome 跳转插入符号错误

element.parentNode.removeChild() 方法在 Internet Explorer 中不起作用

删除节点removeChild()

为啥 removeChild 比 innerHTML = ' ' 快?

删除节点(removeChild())