2009-06-03 8 views
0

私は(swfで)ミニゲームを読み込むためのフレームワークを構築しており、問題が発生しています。複数のイベントをactionscript 3の1つのeventHandlerにキューする方法は?

私は現在、子のミニゲームが親フレームワークに送信するイベントをリッスンするリスナーを持っています。しかし、子どもが互いに近すぎる2つのメッセージ(イベント)を送信した場合、最初のイベントは単に無視され、メッセージの一部が親フレームワークにまったく届かないように見えます。

私は、何らかの形でアクションスクリプトイベントをキューに入れることができるので、イベントはFIFOベースで処理されることを読んでいます。どうやってやるの?ドキュメントはこの問題のためにかなり不足しているように思われるので、私は困惑しています。

多くの感謝!

+1

は、うーん...これは本当に奇妙です... AVM2はあなたがイベントを送出した場合、実行が継続する前に、すべてのハンドラ関数が呼び出され... シングルスレッドです... は、あなたがそれを絞り込んで投稿できます問題を再現するための最小限のセットアップ? greetz back2dos – back2dos

+0

確かに、ここに何か他のものがあるようです。おそらくあなたのイベント発送コードを掲示し、構造を少し説明してください。彼らは同じ場所から同じ方法で派遣されていますか? –

+0

さらなる調査では、(AVM2はシングルスレッドなので)他のメッセージを送信する機会がある前に、子供swfを殺したイベントを派遣したようです。だから問題は解決した!ご協力いただきありがとうございます。 – futureelite7

答えて

2

このような質問を実際に投稿する必要があります。他の人は正しいです - あなたはどこかで間違いを犯したように聞こえますが、いくつかのコードが付いているときに、この種の問題を手助けする方がずっと簡単です。あなたはこのように、タイトなループであなたのイベントを派遣していても、言っ

:あなたはそのループの反復限り多くの「helloを」参照してくださいね...

addEventListener("foo", handleFoo, false, 0); 

for (var i:int = 0; i < 100; i++) 
{ 
    dispatchEvent(new FlexEvent("foo")); 
} 

private function handleFoo(event:Event):void 
{ 
    trace("hello"); 
} 

。それはそれよりずっと「近くに」なることはありません。イベントの処理を優先させることができます - たとえば、このリスナーは最初に呼び出され(したがって、上記の "0")、この他のリスナーは2番目の呼び出されます( "1")など - addEventListener関数のpriority引数を使用して(もう一度、上記参照)、それはそれについてです。あなた自身でキューを書き込まない限り、イベントディスパッチの組み込みのキューイングはありません。