1

我的 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 应用程序中收听的任何想法?

问候阿德勒茨

4

6 回答 6

1

Preloader 的 INIT_COMPLETE 事件在 preloader 收到 Application 的 CREATION_COMPLETE 事件后触发。

初始化顺序是这样的:

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

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

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

于 2009-03-27T01:37:05.007 回答
0

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

更新:

所以你只是希望能够从预加载器中收听 Complete 事件吗?

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

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

看看这是否可行。

于 2009-03-25T12:46:47.737 回答
0

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

预加载器会一直显示,直到您从预加载器调度 Event.COMPLETE 事件。

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

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

于 2009-03-26T05:53:54.587 回答
0

当 Flash 应用程序完成初始化时触发 Flex.INIT_COMPLETE。所以它恰好在主应用程序的初始化事件之后调度。

于 2009-04-22T09:02:45.823 回答
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()。

于 2011-09-13T15:05:31.577 回答
-1

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

于 2009-10-22T01:52:04.557 回答