Apache flex 在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
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事件李>
- 将显示您的应用程序
您可以通过查看预加载程序类的源代码来确认所有这一切。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();" >