2

子オブジェクトで CLICK イベントリスナーを作成する MOUSE_DOWN ハンドラーがあります。当然、マウス ボタンを離した直後に、たまたま子オブジェクトの上にいると、CLICK イベントが発生します。

event.stopImmediatePropagation が、検出サイクルの一部として MOUSE_DOWN を登録する CLICK イベントを中断しないことを発見してがっかりしました。そうでないのは理にかなっていますが、それでも...がっかりです。

MouseEvent.CLICK は、オブジェクトの MOUSE_DOWN を検出することで構成され、オブジェクトを離れずに MOUSE_UP が続く場合、イベントが発生します。MOUSE_DOWN イベントをキャンセルすることで、CLICK バッファからクリアされることを期待していましたが、残念ながら、そのようなジャガイモはありませんでした。

そこに何かトリックはありますか?これはすべて、フラグと、さらにいくつかの MOUSE_UP および MOUSE_DOWN ハンドラーを使用して処理できますが、手間がかかります... Buehler?

4

2 に答える 2

1

私があなたのことを正しく理解していれば、次の方法でこの動作を修正できるはずです。

MOUSE_DOWN ハンドラーの代わりに、CLICK ハンドラーを用意します。

その CLICK ハンドラーは、それに関連付けられているリスナーを削除し、新しい CLICK ハンドラーにする関数への参照を使用して新しいCLICK リスナーを作成します。

いいえ:

//on CreationComplete, or wherever you are adding the MOUSE_DOWN listener
addEventListener(MouseEvent.CLICK, handler1);

private function handler1(aEvent:MouseEvent):void
{
    removeEventListener(MouseEvent.CLICK, handler1);
    addEventListener(MouseEvent.CLICK, handler2);
}
于 2011-08-11T18:42:56.917 に答える
0

イベントの伝播を停止しても、イベントが表示リストを通過するのを停止するだけで、時間を逆にしたり、イベントをキャンセルしたり登録解除したりすることはありません。

ActionScript 3.0: イベント フロー

イベントをキャンセルしたい場合は、イベント リスナーを削除するだけです。

于 2011-08-11T18:37:11.943 に答える