【问题标题】:AS3 - Loader class problem tracing the swf (document class)AS3 - 跟踪 swf(文档类)的加载程序类问题
【发布时间】:2010-10-12 19:21:33
【问题描述】:

我正在使用 Loader 类加载 3 个外部 swf:

  1. sharedTopics.swf(没有文档类)
  2. fonts.swf(文档类为 FontManager)
  3. main.swf(文档类为 Main)

同一个加载器用于加载所有 3 个资产。

__assetLoader = new Loader(); 
var urlReq:URLRequest = new URLRequest(target.path);
__assetLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, this.preloadProgress);
__assetLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.assetCompleteHandler); 
__assetLoader.contentLoaderInfo.addEventListener(Event.INIT, this.assetInitHandler); 
__assetLoader.load(urlReq);

在完整的处理程序中,我将加载程序内容添加到影片剪辑中,然后跟踪一个变量:

var swf:DisplayObject = __assetLoader.content;
Debug.doTrace("Shell:: assetCompleteHandler():: content " + swf);
__app.addChild(MovieClip(swf));

当 sharedTopics、字体和主 swfs(分别)被加载时,我得到以下跟踪语句:

Shell:: assetInitHandler():: evt.currentTarget.content [object MovieClip]
Shell:: assetInitHandler():: evt.currentTarget.content [object FontManager]
Shell:: assetInitHandler():: evt.currentTarget.content [object Main__Preloader__]

我希望最后一个跟踪语句看起来类似于“[object Main]”,它是文档类的名称,但内容是加载器。关于为什么会发生这种情况的任何想法?

在稍后的函数中,我尝试调用 Main 类的 init 函数并得到以下错误:

Error #1069: Property init not found on classes.Main__Preloader__ and there is no default value.

我希望解释清楚。

提前致谢,

迈克

【问题讨论】:

  • Main 是如何创建的?显然,它使用了两帧技巧来编译 SWF,这通常在使用 Flex 或使用 SDK -frame 命令行参数时完成。在这种情况下,您必须等待主 SWF 也被初始化,或者以某种方式找出它何时完全可用(完全加载)。可能 Main 不是 SWF,而是它的子级。
  • 感谢回复 main.fla 附加了文档类,fla 内部没有任何AS。该类确实包含大量的 AS 和包导入等......我不熟悉你提到的“两帧”技巧。此外,我刚刚添加了一个递归函数,该函数试图调用 init 函数,该函数捕获 init not exitsting on 'Main__Preloader__' 的错误并递归。没有这样的运气。

标签: flash actionscript-3


【解决方案1】:

罪魁祸首是 TLFTextField。默认情况下,在 CS5 中,“库路径”(可在 ActionScript3.0 设置 > 库路径中找到)项目设置为运行时共享库​​并使用默认预加载器,因此通过将“默认链接”更改为“合并到代码中”您不必担心从外部加载这些库...

【讨论】:

    【解决方案2】:

    看起来 main.swf 并不打算像您尝试那样间接加载。 zeh 有一点,Main 可能是 SWF 的孩子...
    如果是这种情况(看起来确实如此),您应该查看 Main.as ,找到 Main_Preloader 的实例并检索它正在加载的 url 并加载它......或者尝试简单地绕过 Main_Preloader 或/并在您的 AssetLoading 类中重新实现它。

    【讨论】:

    • 感谢您的回复。我不完全确定 Main 怎么可能是 swf 的孩子,因为 main.fla 的文档类是“Main”。我想指出的一件事是,我没有定义“Main__Preloader__”,并且只在加载 Main 时发生。 main.fla 确实包含从 RSL (sharedTopics) 导入的资产。也许这就是原因。我还会提到我正在使用 CS5,如果这能说明任何奇怪之处。
    • 好吧,我得到了答案并想分享...问题是我使用的是 TLFTextField 并且必须将 Actionscript 3.0 设置 > 库路径中的“默认链接”更改为'合并到代码中'。以前默认链接是“运行时共享库​​”,因此“主”使用预定义的“预加载器 SWF”来加载外部库。
    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多