2009-04-08 23 views
2

私は、ActionScript 3でredispatchマウスイベントを試行する際に問題に遭遇しましたが、これは疑いの余地がありません。私はMouseEvent.clone()メソッドが表示されたら、それを完全に壊したものに絞り込んだ。次のイベントハンドラ:ActionScript MouseEvent.clone()が壊れていますか?

private function handleMouseMove(evt : MouseEvent) : void 
    { 
     trace("mousemove", evt.stageX, evt.stageY); 
     var newEvt : MouseEvent = evt.clone() as MouseEvent; 
     trace("mousemoveclone", newEvt.stageX, newEvt.stageY); 
    } 

次の出力での結果、無限:

mousemove 167 206 
mousemoveclone 0 0 

これは私がするのMouseEventを再送出されたコードは、受信されたものと一致し、壊れたクローン機能の故に私の仮説。

これは、私が何かを見逃していない限り、リンクされたドキュメントが何を起こすべきかと直接矛盾しています。私は、この行動を引き起こす可能性がある(またはしなかった)ことについて全面的に迷っています。 AS3の人は本当にEvent.clone()で自分の文書を読むことを忘れましたか?

代わりに私の特定のユースケースの関数オブジェクトを使用してこれを回避することができますが、私はしたくないでしょう。何か案は?

編集: localXとlocalYのメンバーが正しくクローンされているようですが、ここで何が起こっているのかをもっと犠牲にしています。

答えて

3

これは既知のバグです。あなたはここにバグ報告を見ることができます:http://bugs.adobe.com/jira/browse/FP-343

他のすべてがクローン化されるはずです。バグが修正されるまで手動でstageXとstageYを割り当てることができます。

+1

私はちょうど1年前のそのバグのためにアドビに対する敬意をもっと失ってしまった。リンクありがとう。 –

+0

Yah、そういったバグがいくつかあります。それは多くの人々に影響を与えませんし、回避策は簡単なので、彼らは気にしないと思います。 –

+0

おそらくもっと「私たちはそれを修正することはできませんし、人々はちょうどそれを回避するでしょう」。鶏卵 :) –

2

私はこのスレッドが7ヶ月間休止状態であることを認識していますが、これを少し更新するだけです。これはまだFP10とFlex4では有効です。イベントを再配布する場合も同様です。すなわち:

private function mouseListener(e:MouseEvent):void 
{ 
    dispatchEvent(e); 
} 

は、dispatchEvent()の呼び出しは)(クローンの同等のようですので、のstageXおよびstageYというは0

0

に設定されているこれはかなり古い質問ですが、それが来た何だったこと私が解決策を求めてグーグル・アップしたときに、ここにあるのは十分に包括的ではありません。

「固定」されていないのは、それが意図したとおりに機能しているからです。 stageXとstageYの値は、ゲッターを呼び出すときに計算され、イベントのターゲットを使用してlocalToGlobal変換を実行します。これは、イベントが送出されてからターゲットオブジェクトの位置、位取り、または回転が変更されても、数値が正しいままであるようにするために必要です。

あなたの二つの選択肢あなたが本当に正しいのstageXおよびstageYという値でのMouseEventを再ディスパッチする必要がある場合は、次のとおりです。

  1. はのstageXおよびstageYというゲッターを上書きしたMouseEventのカスタムサブクラスを作成します。オリジナルのターゲットを保存してlocalToGlobalの計算を自分で行うことも、元のイベントを複製するときにそこにある値を使ってstageXとstageYの静的な値を保存することもできます。

  2. Spriteを拡張し、ステージにディスパッチャを追加して、在庫MouseEventが正しく動作するようにします。

関連する問題