2011-03-27 16 views

回答

5

不能嵌入ByteArray到主文档类,因为这是从文档类引用的类将自动包含在框架1.

预加载资产最好的办法是有一个单独的Preloader类和主类。您希望您的预加载器类可以在第1帧上导出,并且您的主类和第2帧上的资产能够导出。

不幸的是,这比应该更复杂,但您可以这样做:将文档类设置为Preloader。本课程包含您的loaderInfo代码。但是,当您完成加载时,不直接实例化Main,直接,即不做var main:Main = new Main()。无论您做什么,这都会自动将Main编译到第1帧。相反,实例化它间接地,像这样:

nextFrame(); // you sometimes need to do this for the player to register classes exported on frame 2 
var mainClass:Class = flash.utils.getDefinitionByName("Main") as Class; 
var main:Sprite = new mainClass(); 
addChild(main); 

这将自动从主猛拉到第1帧

接下来,如果您使用Flash CS3 + IDE中,进入文件 - 停止编译器>发布设置 - > Flash-> ActionScript 3.0设置,然后将“将类上的帧导出”设置更改为帧2.然后,在影片的第2帧上放置一个空的MovieClip。在此MovieClip中,通过放置以下代码来为您的Main类添加引用:var dummy:Main;。你必须这样做的原因是,编译器仍然知道你使用的是Main,所以它实际上将它编译到电影中,否则它根本不会编译它。您也不希望将其放在主时间轴上,因为主时间轴上的任何代码引用都会自动被抽出到第1帧。

在IDE中,一个有用的技巧可以检查事物已导出到适当位置将在“发布属性 - > Flash”中检查“生成大小报告”。您可以检查报告,并在垃圾已导出到第1帧时轻松通知。

如果您使用Flash Builder,FlashDevelop或FDT,则过程基本相同 - 创建单独的Preloader和Main类并实例化间接来自Preloader。但是,信号编译器编译主预载后的框架上,把这个元标记上方public class MainMain.as

[Frame(factoryClass="Preloader")] 

的FlashDevelop还可以通过单击+在项目选项卡反思它旁边的SWF文件。它会显示哪些资产已输出到哪些框架。理想情况下,您只需要第1帧上的最小预加载器。

+0

哇!很棒的技巧,但然后我得到这个错误消息 - ArgumentError:错误#2100:Loader.loadBytes()中的ByteArray参数必须具有大于0的长度。 – kornesh 2011-03-27 21:21:03

+0

不确定在那个,你可以发布你用来创建ByteArray的? – 2011-03-27 21:45:36

+0

我发布了整个预加载器和主类.. – kornesh 2011-03-27 21:53:39

0

我已经在CS4中测试了Mike的方法。显然,引用Main的虚拟影片剪辑不需要位于第2帧或时间轴上的任何位置。只要虚拟影片剪辑设置为在第2帧上导出,Main将在第2帧上导出,因为它在虚拟剪辑的代码中被引用。