在flex中收听预加载器中的事件

时间:2009-03-25 10:27:50

标签: flex actionscript-3 preloader

我的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 Initialize完成后,预加载器将调度Event.COMPLETE。但我希望能够在我的flex应用程序中收听该事件并在发送时执行操作。当它发送时,预加载器会自行移除,这就是它至关重要的原因。关于如何从我的flex应用程序收听的任何想法?

关心Adlertz

6 个答案:

答案 0 :(得分:1)

预加载器收到应用程序的CREATION_COMPLETE事件后会触发Preloader的INIT_COMPLETE事件。

初始化的顺序是:

  • Preloader开始加载您的应用;
  • 下载应用程序,开始初始化;
  • 初始化应用程序,调度CREATION_COMPLETE;
  • 预加载器接收Application.CREATION_COMPLETE,调度INIT_COMPLETE;
  • 您的预加载器类接收Preloader的INIT_COMPLETE;
  • 您的预加载器将调度COMPLETE事件;
  • 预加载器删除预加载器类并调度(私有)PRELOADER_DONE事件;
  • 显示您的申请。

在这种情况下,这意味着Application.CREATION_COMPLETE等同于Preloader.INIT_COMPLETE - 如果您想知道预加载器何时调度INIT_COMPLETE,那么请监听CREATION_COMPLETE。

您可以通过查看Preloader类的源代码来确认所有这些。

答案 1 :(得分:0)

我不确定你想要达到的目的是什么。如果您只是想在初始化应用程序或创建完成时执行某些操作,则可以在应用程序上使用creationComplete或intialize事件。一旦预加载器完成,您是否有理由需要知道(假设与应用程序中的creationComplete事件不同,我认为不会这样)?

更新

所以你只是希望能够从预加载器中听到完整的事件吗?

尝试此操作:在应用程序上创建一个initalize事件处理程序,并尝试将事件侦听器附加到预加载器。它看起来像这样(这没有经过测试,所以它可能有拼写错误等)

public function applicationInitalize_handler ( e:FlexEvent ) : void
{
Application.preloader.addEventListener(Event.COMPLETE,myEventHandler);
}

看看是否可行。

答案 2 :(得分:0)

  

我需要知道预加载器何时完成的原因是因为我想直接播放电影,其中电影中的第一帧看起来像预加载器的图像。

显示预加载器,直到从预加载器发送Event.COMPLETE事件为止。

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

(如果您很好奇,请查看'displayClassCompleteHandler'函数中的Flex Preloader源代码)

答案 3 :(得分:0)

Flash应用程序完成初始化后会触发Flex.INIT_COMPLETE。所以它在主应用程序的初始化事件之后完全发送。

答案 4 :(得分:0)

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

如果您的Preloader类中有一个看起来像

的函数
private function onFlexInitComplete( event:FlexEvent ):void 
{
    dispatchEvent(new Event(Event.COMPLETE));
}

您需要确保应用程序文件的标题看起来像

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

使用此设置,只要您决定从预加载器调度Event.COMPLETE事件,onApplicationComplete()就会被触发。

答案 5 :(得分:-1)

应用程序的APPLICATION_COMPLETE事件似乎是在Preloader激活Event.COMPLETE事件之后发出的......只是听听这个?