AS3:优化我的Flash内部预加载器

时间:2014-11-10 08:43:04

标签: actionscript-3 flash optimization loading

我正在尝试优化我的Flash项目的内部预加载器。预加载器在第1帧上,当它完成时,它gotoAndStop到第2帧,它实例化我的Game类。我的总SWF文件大小是1847 KB,但根据大小报告,我的帧1本身仍然是388 KB。我希望我能以某种方式进一步降低这一点。

如果我在第2帧上注释掉引用我的Game类的代码,我的第1帧将下降到68 KB。我不确定为什么评论帧2的东西会影响第1帧,但是如果我可以保留那个小帧1并且仍然在帧2上实例化会很好。我能做什么,或者那样好它得到了什么?我的Game.as是265 KB。

1 个答案:

答案 0 :(得分:1)

* .as文件的大小不应对生成的SWF大小执行任何操作。您可以通过排除静态数据(尤其是位图)来优化第1帧,还可以避免直接引用Main类或任何游戏对象衍生物。请注意,每当您包含到类的直接链接(例如,以var a:SomeClass;形式)时,类描述以及嵌入式资源,链接类以及静态链接类所需的所有内容也会编译到第一帧中,增加它的大小。如果您非常需要将对象链接到后续帧中,请确保已完全加载SWF,或者至少(如果您决定将第2帧拆分为多个)加载该类的帧,则可以调用getDefinitionByName()具有实例的完全限定路径,并从加载的数据中接收类信息。然后使用作为类模板返回的var来实例化该类的对象,并从那时起正常使用它。

一个例子:

// provided you have a link to `PlayButton` in your first frame
// var playButton:PlayButton=new PlayButton(); 
// ^ the code to replace
var playButton:Sprite; // MovieClip can also do, if PlayButton is one
var playButtonClass:Class=flash.utils.getDefinitionByName("PlayButton") as Class;
// stuff full package path in this call ^^^ e.g. "mygame.PlayButton"
if (playButtonClass) playButton=new PlayButtonClass(); // otherwise catch errors

The manual on getDefinitionByName()