2009-03-25 7 views
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の初期化が完了すると、プリローダーがEvent.COMPLETEをディスパッチします。しかし私は私のフレックスアプリでイベントを聴きたいと思っていて、ディスパッチするときに何かをやりたい。それがディスパッチするとき、プリローダーはそれ自体を取り除きます。私のフレックスアプリからどのように聞くことができるかについてのアイデアはありますか?

よろしくAdlertz

答えて

1

プリローダーのINIT_COMPLETEイベントが起動されます。

初期化の順序はこれです:

  • プリローダーは、あなたのアプリケーションのロードを開始。
  • アプリケーションがダウンロードされ、初期化が開始されます。
  • アプリケーションが初期化され、CREATION_COMPLETEが送出されます。
  • プリローダーはアプリケーションを受け取ります。CREATION_COMPLETE、INIT_COMPLETEを送出します。
  • プリローダークラスはプリローダーのINIT_COMPLETEを受け取ります。
  • プリローダはCOMPLETEイベントを送出します。
  • プリローダーはプリローダークラスを削除し、(プライベート)PRELOADER_DONEイベントを送出します。
  • アプリケーションが表示されます。これが、この場合には意味は何

Application.CREATION_COMPLETEがPreloader.INIT_COMPLETEと同等であるということです - あなたはプリローダーはINIT_COMPLETEを送出する際に知りたい場合は、その後CREATION_COMPLETEを聞きます。

このすべてを確認するには、Preloaderクラスのソースコードを確認します。

0

私はそれはあなたが達成しようとしているです正確に何を特定していません。アプリケーションの初期化時または作成が完了した時点で何かをやりたければ、アプリケーションでcreationCompleteまたはintializeイベントを使用できます。プリローダーが完了するとすぐに知る必要がある理由はありますか?(アプリケーションからのcreationCompleteイベントとは異なると仮定して、私はそうは思わないでしょう)?

更新:

ので、あなただけの正しいプリローダーから完全なイベントに耳を傾けることができるように欠けていますか?

これを試してください:アプリケーションで初期化イベントハンドラを作成し、プリローダにイベントリスナーをアタッチしてみます。これは何かのように見えます(これはテストされていないので、タイプミスなどがあります)

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

これが機能するかどうかを確認してください。

+0

アプリケーションの初期化関数でApplication.application.preloader.addEventListener(Event.COMPLETE、onPreloaderComplete)を試しましたが、エラー#1009が発生しました。nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。 –

+0

プリローダーの設定はどうですか? mx:applicationタグのプロパティとして配置していますか? –

+0

はい私はそうです。リスナーを追加した後で認識されますか? –

0

プリローダーの完成時を知る必要がある理由は、映画の最初のフレームがプリローダーのイメージのように見える、直後の映画を再生したいからです。

プリローダーは、プリローダーからEvent.COMPLETEイベントをディスパッチするまで表示されます。

プレローダーが完了してからアプリケーションが表示されるまでに何かを表示したい場合は、Event.COMPLETEをディスパッチする前にプレローダーの中で実行する必要があります。 COMPLETEイベントをディスパッチしないと、プリローダーは永遠に表示されます。プリローダーは、アプリケーションのCREATION_COMPLETEイベントを受信した後

(あなたは好奇心旺盛であれば、「displayClassCompleteHandler」関数のFlexプリローダーのソースコードを見て)

0

フラッシュアプ​​リケーションが初期化を完了すると、Flex.INIT_COMPLETEがトリガーされます。そのため、メインアプリケーションのinitializeイベントの直後にディスパッチされます。

-1

アプリケーションのAPPLICATION_COMPLETEイベントは、PreloaderがEvent.COMPLETEイベントを発生した直後に発行されたようです。

0

Flexアプリケーションでは、Application.applicationCompleteイベントをリッスンする必要があります。

あなたPreloaderクラスであなたが

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

はあなたのアプリケーションのファイルへのヘッダは、このセットアップ、onApplicationCompleteで

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

のように見えることを確認したいと思うように見える機能を持っている場合プリローダーからEvent.COMPLETEイベントをディスパッチするときはいつでも()がトリガーされます。

関連する問題