AS3和Flash Player:首先加载的SWF资产会覆盖第二个

时间:2013-08-06 11:38:44

标签: actionscript-3 flash flash-cs6

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

Heya伙计们。我一直在讨论这个巨大的问题。我正在做一个教育游戏。这个主SWF加载了其他几个SWF。由于这是一个双语游戏,每个活动有两个版本,西班牙语和英语版本。

现在主要关注。假设我有这个名为'hangman'的活动。我有'hangman.swf'这是西班牙语版本和'hangmanE.swf'这是英语版本。除了实际使用的资产外,它们几乎相同。两者都由主SWF加载。所以在他们的库中我有一个声音,它有一个名为'AudioInstruction'的类,这是活动的指令。实际文件是不同的,因为我需要每种语言一个,但给出的类是相同的。

文件地图:

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

问题出现在我打开西班牙语版本然后我切换到英语版本或反之亦然。由于英语第二次被打开,它实际上忽略了它的内部'AudioInstruction'文件并且只播放西班牙文件。 好像拥有相同类名的资产会使第二个SWF忽略其自己的资产。有人遇到过这个问题吗?

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

2 个答案:

答案 0 :(得分:1)

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

  

通过创建系统域的子级来对子SWF文件进行分区。   在图中,应用程序域2被创建为子域   系统域。 [...]这种技术的一个用途是拥有旧的   应用程序动态加载相同的较新版本   应用没有冲突。没有冲突,因为虽然   使用相同的类名,它们被分成不同的类   应用领域。

参考:Working with Application Domains

答案 1 :(得分:0)

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

See docs for more info

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