2009-06-05 13 views
0

ActionScriptでキャプチャされたイベントの処理を一定時間遅らせることをお勧めします。今のところ、私は配列にそれらを貼り付け、必要なときにそれを通過しますが、これは非効率的です。これを行うより良い方法はありますか?Flashでのイベント処理の遅延

+0

ポスト編集...ご質問にお答えしていますか... :) – back2dos

+0

これらはUIイベントではなくファイルです完全な型のイベントをロードしますか?のようなonsoundcomplete? – Assembler

+0

ありがとう、dos! アセンブラ、フレームレートロックされたプラットフォーム用です。私はすべての入力イベントを新しいフレームが始まる頃に処理したいと思っています。 – Archagon

答えて

2

これは私にとって、これを行うためのきれいで効率的な方法です。
遅延してどういう意味ですか?あなたは後でそれらを単に処理すること、または所定の時間の後にそれらを処理することを意味するでしょうか?

正確な瞬間にイベントを処理するために、イベントハンドラの実際の処理関数(flash.utils.setTimeoutを使用)に常にタイムアウトを設定できます。しかし、これは非効率的になる可能性があります。なぜなら、ランタイムによって処理される必要のある多くのタイムアウトが発生する可能性があるからです。

あなたのニーズをもう少し詳しく指定できますか?

編集:

OK]をクリックして、基本的には、フラッシュプレーヤーがシングルスレッドである - それは、バイトコードの実行がシングルスレッドです。そして、送出されるイベントは即時に処理されます。すなわち、dispatchEvent(someEvent)は登録されたすべてのハンドラ(したがってASバイトコード)を直接呼び出します。

イベントが実際にバックグラウンドで生成されます。これらはI/O(ネットワーク、ユーザー入力)またはタイマー(TimerEvents)から来ます。バイトコードが実行されている間に、これらのイベントの一部が実際に発生することがあります。これは、バックグラウンドスレッドで発生します。バックグラウンドスレッドは、イベント(抽象的な意味で)を(de)キューを介してメインスレッドに渡します。

メインスレッドがバイトコードを実行中にビジー状態になると、完了するまでこれらのメッセージは無視されます(注意:ほとんどすべてのバイトコードの実行は常にイベントの暗黙的な結果です(フレーム、入力、ロード操作など))。アイドル状態になると、利用可能なメッセージが見つかるまでその情報がActionScriptイベントオブジェクトにラップされ、前述したようにディスパッチされるまで、すべてのキューが検索されます。

このように、このキューイングは非常に低いレベルのメカニズムで、スレッド間通信(多くのマルチスレッドシナリオで使用されます)にあり、アクセスできません。

しかし、前にも述べたように、あなたのアプローチは有効であり、理にかなっています。代わりに、配列のベクターへ

+0

後で私自身の裁量で処理します。私は確信が持てませんが、処理が必要なイベントはすでに何らかのキューに格納されていると聞いています。 2番目のキューに頼るのではなく、このキューに直接アクセスする方法はありますか? – Archagon

0

ストアそれら:P

私はそれはあなたがあなたのプログラムを構築する方法についてのすべてだと思う、多分あなたは、関連するインスタンスの下で撮影したイベントを割り当てることができますか?グローバルなベクトルからクエリするのではなく、キャプチャされたイベントを処理するのは当然のことです。