Apache flex 在flex中侦听来自预加载程序的事件

Apache flex 在flex中侦听来自预加载程序的事件,apache-flex,actionscript-3,preloader,Apache Flex,Actionscript 3,Preloader,我的flex应用程序中有一个预加载程序: public class Preloader extends DownloadProgressBar { private var _preloader:PreloaderAnimation; public function Preloader() { super(); _preloader = new PreloaderAnimation; addChild(_preload

我的flex应用程序中有一个预加载程序:

public class Preloader extends DownloadProgressBar 
{

    private var _preloader:PreloaderAnimation;

    public function Preloader()
    {
        super();

        _preloader = new PreloaderAnimation;
        addChild(_preloader);
    }

    public override function set preloader(preloader:Sprite):void 
    {                   
        preloader.addEventListener(ProgressEvent.PROGRESS  , onSWFDownloadProgress );
        preloader.addEventListener(Event.COMPLETE          , onSWFDownloadComplete );
        preloader.addEventListener(FlexEvent.INIT_PROGRESS , onFlexInitProgress    );
        preloader.addEventListener(FlexEvent.INIT_COMPLETE , onFlexInitComplete    );
    }

    .........

    private function onFlexInitComplete( event:FlexEvent ):void 
    {
        dispatchEvent(new Event(Event.COMPLETE));
    }
}
Flex初始化完成后,预加载程序将发送一个Event.complete。但我希望能够在我的flex应用程序中收听事件,并在它发送时做一些事情。当它调度预加载程序时,它会自动移除,这就是为什么它至关重要的原因。你知道我如何通过flex应用程序收听吗


关于阿德勒茨,我不确定你到底想达到什么目的。如果您只是想在应用程序初始化或创建完成时执行某些操作,则可以在应用程序上使用creationComplete或Initialize事件。当预加载程序完成时,您是否需要知道原因(假设这与应用程序中的creationComplete事件不同,我认为不会)

更新:

所以你只是想从预加载程序中听到完整的事件,对吗

尝试以下操作:在应用程序上创建初始化事件处理程序,并尝试将事件侦听器附加到预加载程序。它看起来像这样(这是未经测试的,因此可能有拼写错误等)

看看这是否可行

我之所以需要知道预加载程序何时完成,是因为我想在之后直接播放电影,电影中的第一帧看起来像预加载程序的图像

将显示预加载程序,直到您从预加载程序中分派Event.COMPLETE事件

如果要在预加载程序完成和正在显示的应用程序之间显示某些内容,则需要在调度Event.COMPLETE之前在预加载程序内部执行此操作。如果您不发送完整事件,您的预加载程序将永远显示


(如果您好奇,请查看“displayClassCompleteHandler”函数中的Flex预加载程序源代码)

预加载程序的INIT\u COMPLETE事件在预加载程序接收到应用程序的创建完成事件后触发

初始化的顺序如下:

  • 预加载程序开始加载你的应用程序
  • 下载应用程序,开始初始化
  • 应用程序已初始化,发送创建完成
  • 预加载程序接收Application.CREATION\u COMPLETE,发送INIT\u COMPLETE
  • 预加载程序类接收预加载程序的INIT_COMPLETE
  • 您的预加载程序发送完整事件
  • 预加载程序删除预加载程序类并分派(私有)预加载程序\u DONE事件
  • 将显示您的应用程序
在这种情况下,这意味着Application.CREATION_COMPLETE等同于preload.INIT_COMPLETE-如果您想知道预加载程序何时发送INIT_COMPLETE,请侦听CREATION_COMPLETE


您可以通过查看预加载程序类的源代码来确认所有这一切。

Flex.INIT\u COMPLETE在flash应用程序完成初始化后触发。因此,它在主应用程序的初始化事件之后被完全调度

应用程序的application_COMPLETE事件似乎是在预加载程序触发事件之后发出的。COMPLETE事件。。。听一下这个?

在Flex应用程序中,您需要听application.applicationComplete事件

如果在预加载类中有一个函数

private function onFlexInitComplete( event:FlexEvent ):void 
{
    dispatchEvent(new Event(Event.COMPLETE));
}
您需要确保应用程序文件的头如下所示

<s:Application 
    preloader = "MyPreloader"
    applicationComplete="onApplicationComplete();" >


使用此设置,每当您决定从预加载程序中分派Event.COMPLETE事件时,onApplicationComplete()将被触发。

我在应用程序中的初始化函数中尝试了Application.Application.preload.addEventListener(Event.COMPLETE,OnPreload-COMPLETE),但我遇到了一个错误#1009:无法访问空对象引用的属性或方法。如何设置预加载程序?您是否将其作为属性放在mx:application标记上?
<s:Application 
    preloader = "MyPreloader"
    applicationComplete="onApplicationComplete();" >