内部AS3预加载器&阶段问题

时间:2013-02-08 00:55:20

标签: actionscript-3 flash preloader flash-cs6

我需要创建一个没有外部文件的单个SWF,所以我试图在我的Flash项目中添加一个内部预加载器,该项目具有[嵌入]资源。我知道[embed]会导致预加载器出现问题,因为它将资产置于第1帧。我已经尝试了这些帖子中建议的解决方案,您可以将文档类设置为预加载器类:

Preloader for SWF with embed bytearray

How to create Preloader in AS3

我可以让它工作,但只有当我注释掉涉及该阶段的任何代码行时,否则我会得到“错误#1009:无法访问空对象引用的属性或方法”。这些行是必不可少的,所以有人知道如何在舞台上修复这些错误吗?

1 个答案:

答案 0 :(得分:0)

你还没有发布你的代码或fla,所以我能做的就是分享对我有用的东西。

首先,我不会使用Embed。相反,使用swc。我发现Embed在实际获取整个资产方面可能不可靠(至少在使用Flash Builder + Flash Pro发布时,这是我的工作流程)。

将资产放入swc后,请尝试以下步骤:

  1. 将导出帧设置为第10帧(或除1以外的任何帧 - 我喜欢第10帧,因为这样您就可以阅读标记为“Preloader”)
  2. 将您的实际内容放在第11帧上。您可以通过多种方式构建它。由于我编程到Interfaces,我给第11帧上的任何实例名称,然后使用setter来确定我的“第一件事”已被放置在舞台上。我可以逃脱这个因为我的主要文档类只知道接口的定义,而不是类的完整实现,因此Class不需要加载主Document类才能工作。你可能没有真正使用时间轴,可能没有编程到接口,所以你可能只是将第11帧上的符号的基类设置为你想要做的任何事情的主要逻辑。
  3. 将预加载器图形放在第1帧中。我不确定为什么你的舞台参考如此重要。我个人不会在预加载器中使用任何逻辑。相反,我使用一个跨越帧1-10的微调器(加上“Loading ...”这个词。旋转器只是在类加载时旋转。嵌入帧充当临时“停止”,只保持时间线,直到那些已经加载了类。一旦加载了类,时间轴的行为就像你在其上调用play()。所以它真的很简单。如果你需要它更复杂,给你一个预加载器图形一个实例名称,并为它设置一个getter / setter对,然后使用setter来触发访问该阶段的逻辑。你几乎可以保证在那时有一个有效的阶段。
  4. 警告:如果您确实使用了timelime,如果您尝试跳转到尚未加载的帧,则会得到奇怪的结果,因此请务必检查是否加载了给定的帧。它接近主时间轴的末尾,在拨打goToAndPlay()goToAndStop()之前,您的主要时间轴很重要。

    一些可能对您有所帮助的参考资料: