首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3:优化闪存的内部预加载器

AS3:优化闪存的内部预加载器
EN

Stack Overflow用户
提问于 2014-11-10 16:43:04
回答 1查看 69关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-11-10 20:25:25

*.as文件的大小与生成的SWF大小无关。您可以通过排除帧1中的静态数据来优化第1帧,尤其是位图,还可以避免直接引用Main类或任何游戏对象派生对象。看,每当你包含一个类的直接链接(比如,在表单var a:SomeClass;中),类描述连同嵌入的资源、链接的类以及静态链接类所需的所有东西都会被编译到第一个框架中,从而增加了它的大小。如果您非常需要将对象链接到后续帧之外,请确保SWF已完全加载,或者至少(如果您决定将frame 2拆分为几个)具有该类的帧已加载,然后您可以使用实例的完全限定路径调用getDefinitionByName(),并从加载的数据中接收类信息。然后,使用作为类模板返回的var实例化该类的一个对象,并在此后正常使用它。

举个例子:

代码语言:javascript
复制
// 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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26839765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档