2012-03-08 14 views
3

私はMOUSE_MOVEイベントを待ち受けています。中マウスボタンを押したときにMOUSE_MOVEイベントが送信されないのはなぜですか?

中マウスボタンを押していない限り、それらは送受信されます。中ボタンが離されるまで、私はもうMOUSE_MOVEイベントを取得しません。

これはFlashの問題か、マウス/コンピュータの特定の設定(Lionのブルートゥースマイティマウス)の問題ですか?

既知の回避策はありますか?


次は、この問題を示すサンプルプロジェクトです。
左クリックしてドラッグするとマウスの移動イベントがトレースされますが、中クリックは中マウスの下と中マウスだけを表示します。

import flash.events.MouseEvent; 

this.stage.addEventListener(MouseEvent.MIDDLE_MOUSE_DOWN, onMiddleMouseDown); 
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 

function onMiddleMouseDown(e:MouseEvent):void { 
trace("middle down"); 

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
this.stage.addEventListener(MouseEvent.MIDDLE_MOUSE_UP, onMiddleMouseUp); 
} 

function onMouseMove(e:MouseEvent):void { 
trace("mouse move"); 
} 

function onMiddleMouseUp(e:MouseEvent):void { 
trace("middle up"); 

this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
this.stage.removeEventListener(MouseEvent.MIDDLE_MOUSE_UP, onMiddleMouseUp); 
} 

function onMouseDown(e:MouseEvent):void { 
trace("down"); 

this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
this.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
} 

function onMouseUp(e:MouseEvent):void { 
trace("up"); 

this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
this.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
} 

UPDATE:
中央のボタンを押しているときにマウスの位置(するmouseXとmouseYのプロパティ)が更新されていないことが表示されます。私はまだ理由を知りたいのですが、これに対応する方法があるかどうか知りたいです。

+0

あなたの設定に問題があるようです。私はあなたのコードをコピーしてテストし、MOUSE_MOVEが正しく起動し、mouseXとmouseYが正しく更新されます。かなり奇妙な。 –

+0

ああクール、知っておいてよかった。ありがとう。私はそれがMac/Lionのことだと思っています。私はいくつかのマウスを試してみましたが、私のマウス設定で手を加えましたが、何も違いはありません。 – Cadin

答えて

0

普通のマウスボタンはほとんどのドライバでスクロール可能に設定されています。マウスがメッセージを移動する代わりに、ボタンが押されている間に何らかの種類のスクロールメッセージが表示される可能性があります。

+0

ええ、そうかもしれません。私はマウスの設定でスクロールをオフにしようとしましたが、それは違いはありません。 – Cadin

0

MOUSE_MOVEイベントが絶対に必要ですか?ほとんどの場合、ENTER_FRAMEイベントはそれをかなりよく置き換えることができます。

addEventListener(Event.ENTER_FRAME, eFrame); 
private function eFrame(event:Event):void 
{ 
    trace(mouseX,mouseY); 
} 
+0

提案していただきありがとうございます。代わりにENTER_FRAMEを使うようにプログラムを修正しようとしました。残念ながら、中ボタンが押されていない場合、mouseXとmouseYは更新されていないようです(これはMOUSE_MOVEが決して起動しない理由を説明しています)。これが一般的なフラッシュであるのか、自分の設定に固有のものなのかまだ分かりません。 – Cadin

関連する問題