我们正在开发一个Flash CS4项目,其中主.fla文件的大小已经膨胀,'Publish'将永远消失。我怀疑大量的(并且至少有一些编译时间)是由于库中音频符号的数量造成的。
我希望从.fla文件中删除这种不必要的膨胀。我已尝试从库中删除音频符号并使用[embed]
元数据标签,如下所示:
[Embed(source="audio/music/EndOfLevelDitty.mp3")]
public var EndOfLevelDitty:Class
生成的已发布文件完美无缺,但存在问题。我们的游戏在时间轴的第一帧使用预加载器,因此需要在第2帧中导出所有其他类(如发布设置> ActionScript 3.0设置中所设置)。所以尺寸报告通常是这样开始的:
Frame # Frame Bytes Total Bytes Scene ------- ----------- ----------- ---------------- 1 284515 284515 Scene 1 2 5485305 5769820 (AS 3.0 Classes Export Frame)
但是,如果我在小声音上使用[embed]
标签,我的尺寸报告现在是:
Frame # Frame Bytes Total Bytes Scene ------- ----------- ----------- ---------------- 1 363320 363320 Scene 1 2 5407240 5770560 (AS 3.0 Classes Export Frame)
正如您所看到的,嵌入式声音已导出到第1帧而不是第2帧。如果我以这种方式嵌入所有声音,则第1帧的大小会变得很大,用户会看到在预加载器框架甚至加载之前的白色屏幕。
所以我的问题是:我可以使用[embed]
代码但是在第2帧而不是第1帧中导出嵌入资产吗?
项目限制:
编辑:我也决定在嵌入式库SWC中使用音频,但似乎没有办法将其嵌入到第2帧中;它总是在第1帧结束。
答案 0 :(得分:0)
为什么不简单地将资源放在您想要的框架中: 使用您的资产创建一个新类:
public class Assets extends Sprite {
[Embed(source="audio/music/EndOfLevelDitty.mp3")]
public var EndOfLevelDitty:Class;
public function Assets() {
super();
}
}
然后在flash IDE中创建一个新符号并使其扩展到Assets类,并将此符号放入您想要的框架中
答案 1 :(得分:0)
我喜欢帕特里克的答案,听起来应该有效。
您可能还会考虑在不同的.swf中编写预加载器 - 这很简单,您可以避免所有的frame1 / frame2废话。 :)
答案 2 :(得分:0)
最后我只是厌倦了Flash中的所有混乱,并决定在Flex中构建预加载器(仅),将游戏SWF嵌入到预加载器中并使用SWFLoader加载它。 (这是基于Myk的建议。)最后我仍然有一个SWF,Flex的更强大的预加载系统处理预加载器显示。
我最终没有使用完整的Flex Builder;我刚从免费的Flex SDK中使用mxmlc编译了Flex的东西。
这是我的mxml文件(我真的不知道我在用mxml做什么,所以请有人告诉我这种方法是否错误):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" preloader="CustomPreloader" width="755" height="500" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#000000, #000000]" frameRate="30">
<mx:SWFLoader source="@Embed(source='../../trunk/Game.swf')" width="755" height="500" x="0" scaleContent="false" y="0"/>
</mx:Application>
(CustomPreloader
是一个扩展mx.preloaders.DownloadProgressBar
的简单类。)
我喜欢这种方法,我现在可以在Flash方面做任何我喜欢的事情;我可以不再担心导出的帧类了。
我担心的一个问题是游戏现在似乎运行得稍慢。使用SWFLoader时是否存在性能问题?有更快的替代方案吗?