我正在尝试优化我的Flash项目的内部预加载器。预加载器在第1帧,当它完成时,它被gotoAndStop到第2帧,它实例化了我的游戏类。我的SWF文件总大小是1847KB,但根据大小报告,我的第1帧本身仍然是388KB。我希望我能以某种方式进一步降低它。
如果我在第2帧注释掉引用我的Game类的代码,我的第1帧下降到68KB。我不确定为什么注释掉frame 2的东西会影响frame 1,但如果我可以保留那个小frame 1,并且仍然在frame 2上实例化,那就太好了。有什么我可以做的吗,或者这就像它得到的那样好吗?我的Game.as是265KB。
发布于 2014-11-10 20:25:25
*.as文件的大小与生成的SWF大小无关。您可以通过排除帧1中的静态数据来优化第1帧,尤其是位图,还可以避免直接引用Main类或任何游戏对象派生对象。看,每当你包含一个类的直接链接(比如,在表单var a:SomeClass;中),类描述连同嵌入的资源、链接的类以及静态链接类所需的所有东西都会被编译到第一个框架中,从而增加了它的大小。如果您非常需要将对象链接到后续帧之外,请确保SWF已完全加载,或者至少(如果您决定将frame 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 errorsThe manual on getDefinitionByName()
https://stackoverflow.com/questions/26839765
复制相似问题