0

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

带有嵌入字节数组的 SWF 预加载器

如何在 AS3 中创建预加载器

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

4

1 回答 1

0

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

首先,我不会使用 Embed。相反,请使用 swc。我发现嵌入可能不可靠,因为实际上将整个资产放入其中(至少在使用 Flash Builder + Flash Pro 发布时,这是我的工作流程)。

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

  1. 将您的导出帧设置为第 10 帧(或第 1 帧以外的任何帧——我喜欢第 10 帧,因为这样您就可以阅读“预加载器”的标签)
  2. 将您的实际内容放在第 11 帧上。您可以通过多种方式构建它。因为我对接口进行编程,所以我给第 11 帧上的任何东西一个实例名称,然后使用一个 setter 来确定我的“第一件事”已经放在舞台上。我可以解决这个问题,因为我的主文档类只知道接口的定义,而不是类的完整实现,所以不需要加载类来让主文档类工作。您可能没有真正使用时间线,也可能没有对接口进行编程,因此您可能只需将第 11 帧上的符号的基类设置为您尝试执行的任何操作的主要逻辑。
  3. 将您的预加载器图形放在第 1 帧中。我不确定为什么您的舞台参考如此重要。我个人不会在预加载器中使用任何逻辑。相反,我使用了一个跨越 1-10 帧的微调器(加上“正在加载...”这个词。微调器只是在类加载时旋转。嵌入框架充当临时“停止”,它只是将时间线保留到那些类已经加载。一旦加载了类,时间线就会像你调用play()的那样运行。所以它真的可以这么简单。如果你需要它更复杂,给你的预加载器图形一个实例名称并设置为它设置一个 getter/setter 对,然后使用 setter 触发访问阶段的逻辑。你几乎可以保证此时有一个有效的阶段。

警告:如果你确实使用了时间,如果你试图跳转到一个尚未加载的帧,你会得到奇怪的结果,所以一定要检查一个给定的帧是否已经加载,如果它靠近您的主时间线结束并且您的主时间线在调用goToAndPlay()或之前有大量资产goToAndStop()

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

于 2013-02-08T04:37:45.980 回答