0

現在、マッピング API の描画ツールを使用しています。マウスをダブルクリックするたびに、マップ サービスが測定を実行し、描画している線の長さを表示します。

MouseEvent.DOUBLE_CLICK をディスパッチして、このダブルクリックを手動で模倣したいのですが、マップ サービスがこのデフォルトの Flex イベントをリッスンしていません。ユーザーがマウスをダブルクリックしたときにディスパッチされるカスタム MapMouseEvent などを API が作成したと思われます。

マウスをダブルクリックしたときにどのイベントがディスパッチされているかを判断する方法はありますか?

4

2 に答える 2

0

API は、必ずしも独自のイベントをディスパッチしているわけではありません。たとえそうであっても、最初に MouseEvents をリッスンする必要があります。MouseEvent.DOUBLE_CLICKを使用するか、連続するMouseEvent.CLICKまたはMouseEvent.MOUSE_DOWNイベントをリッスンすることで、ダブルクリックを検出できます。これらのイベントの 1 つまたは複数をどこかでリッスンせずにダブルクリックを検出する方法は (Flash 内だけで) ありません。

マップ サービスが DOUBLE_CLICK イベントをリッスンしている可能性もありますが、正しいオブジェクトから MouseEvent をディスパッチしていません。たとえば、マップ サービスがこれを行うとします。

mapRoot.mapChild.addEventListener(MouseEvent.DOUBLE_CLICK, performMeasurement);

そしてあなたはこれをします:

mapRoot.dispatchEvent(new MouseEvent(MouseEvent.DOUBLE_CLICK));

何も起こりません。

他の可能性もあります:
マウスで実際にダブルクリックを実行すると、いくつかのイベントが送出されます: MOUSE_DOWN、MOUSE_UP、CLICK、MOUSE_DOWN、MOUSE_UP、CLICK、DOUBLE_CLICK

マップ サービスが MOUSE_DOWN をリッスンし、次のように MOUSE_DOWN ハンドラー内に DOUBLE_CLICK リスナーを追加する可能性があります。

mapRoot.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler);

private function _mouseDownHandler(event:MouseEvent):void
{
    var targ:InteractiveObject = event.target as InteractiveObject;
    targ.addEventListener(MouseEvent.DOUBLE_CLICK, _doubleClickHandler);
}

private function _doubleClickHandler(event:MouseEvent):void
{
    var targ:InteractiveObject = event.target as InteractiveObject;
    targ.removeEventListener(MouseEVent.DOUBLE_CLICK, doubleClickHandler);
    performMeasurement();
}

そのため、ハンドラーをトリガーするために、実際にはイベントの組み合わせをディスパッチする必要がある場合があります。


次のことを試すことができます。

DisplayObjectContainer.getObjectsUnderPoint()クリックに応答する可能性のあるすべてのオブジェクトの配列を取得するために使用します。次に、その配列内の各オブジェクトから、適切なオブジェクトから適切なイベントが発生するまで、MouseEvents のさまざまなシーケンスをディスパッチしてみてください。

ただし、 areInaccessibleObjectsUnderPoint()テストしたポイントで が true を返す場合、アクセスできないオブジェクトがいくつかあることに注意してください。これらのオブジェクトがマップ サービスがリッスンしているオブジェクトである場合は、対象外です。幸運。

于 2011-05-14T05:44:15.407 に答える
-2
public function cbMouseEvents( e:MouseEvent ):void{
    trace( e.type )
}
于 2011-05-13T20:07:23.200 に答える