AS3 和 Flash Player:第一个加载的 SWF 资源会覆盖第二个 SWF 资源



使用:Adobe Flash CS6导出:Flash播放器11.2操作系统:OSX/Windows

嘿,伙计们。这个大问题我已经有一段时间了。我正在做一个教育游戏。这个主SWF加载其他几个SWF。由于这是一个双语游戏,每个活动都有两个版本,西班牙语和英语版本。

现在来谈谈主要关注点。比方说我有一个叫做"刽子手"的活动。我有西班牙语版的"hangman.swf"和英语版的"hangman.swf"。除了实际使用的资产外,它们实际上是一样的。两者都由主SWF加载。所以在他们的图书馆里,我有一个声音,它有一个名为"音频指令"的类,这是活动的指令。实际的文件是不同的,因为我需要每种语言一个,但给出的类是相同的。

文件映射:

  • Master.swf
    • Hangman.swf
    • HangmanE.swf

当我打开西班牙语版本,然后切换到英语版本时,问题就来了,反之亦然。由于英语的是第二个打开的,它实际上忽略了内部的"音频指令"文件,只播放西班牙语的就好像拥有相同类名的资产会使第二个主权财富基金忽略自己的资产一样。有人遇到过这个问题吗

它可以发生在任何类型的资产MovieClip、Sound或Graphic中。我以为这是因为帧内编码,但我让它们基于类,它们仍然存在这个问题。这不是任何操作系统独有的,它发生在Windows和Mac OSX中。

将加载的SWF放入另一个应用程序域(请参阅ApplicationDomain类)。

通过创建系统域的子级,对子SWF文件进行分区。在图中,应用程序域2被创建为系统域。[…]这种技术的一个用途是应用程序动态加载相同的更新版本应用程序而不发生冲突。没有冲突,因为尽管使用相同的类名,它们被划分为不同的应用程序域。

参考:使用应用程序域

在加载第二个swf之前,尝试在加载第一个swf的Loader上调用yourLoaderName.unloadAndStop()

有关更多信息,请参阅文档

听起来Flash仍然保留着第一个swf资产,当第二个swf加载时,它发现内存中已经有许多相同的资产。

最新更新