2009-05-30 6 views
1

私は私が一番下に達することができない異常な動作をしています。私はこれを実行すると、私はswf領域で移動すると、マウスの動きで正常にトレースします。期待される。AS3プロジェクト - アプリケーションの外部で反応するマウス移動リスナー

しかし、画面上でのいずれかをクリックすると、移動イベントがトレースされます。クリックしてドラッグすると、ブラウザのswf領域を移動しているかのようにトレースされます。

ここにコードがあります。私はそれをベアボーンに単純化しました。これを「エンジン」と呼ばれるFlexの空のAS3プロジェクトに入れるだけで、明らかに引用符は表示されません。

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 

[SWF(width='640', height='360', backgroundColor='#888888', frameRate='31')] 
public class Engine extends Sprite 
{  
    public function Engine() 
    { 
     // Add the mouse handlers 
     stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
    } 

    public function mouseMoveHandler(evt:MouseEvent):void 
    { 
     trace("move"); 
    } 
} 
} 

回避策として、MOUSE_OVERを1つ追加してMOUSE_OUTで削除しました。しかし、その行動はまだまれであるように見えます。なぜそれが起こっているのか理解することに興味があります。

イベントをアプリケーションの実際の段階に制限する方法を教えてもらえますか?

答えて

0

フラッシュムービーの内側をクリックしてマウスをその外にドラッグすると、マウスを離すまでMOUSE_MOVEイベントが引き続きトリガーされます。 MOUSE_LEAVEは、プレイヤーの外にマウスを離したときにのみトリガーされます。これがFlash Playerの仕組みです。

多分私は間違っていますが、私はあなたがこの動作を変更することはできないと思います。

+1

はい、理にかなっています。これは私が言及している動作ではありません。画面上の* ANYWHERE *をクリックすると、別のアプリケーション、リンゴバー、何でも...ムーブイベントが登録されます。 Flashがフォーカスを得る方法がない場合でも。 – grey

+0

申し訳ありませんが、あなたのコードでこの現象を再現することはできません。 FPのバージョン、OS、...のような詳細を投稿できますか? –

+0

確かに、遅れて申し訳ありません。 Flash Playerバージョン - デバッグ、MAC 10,0,22,87 – grey

1

すでに説明したように、これらのイベントが発生するのを止めることはできません。マウスを離すまでトリガされます。

あなたができることは、MouseEventの座標をステージの境界と比較し、それらを無視することです。

public function mouseMoveHandler(evt:MouseEvent):void 
{ 
    if (evt.stageX >= 0 && evt.stageX <= stage.stageWidth && 
     evt.stageY >= 0 && evt.stageY <= stage.stageHeight) 
    { 
     trace("move"); 
    } 
} 
+0

もう一度。 swfやブラウザにフォーカスが当たったときだけではない。 ANYは、任意のアプリケーションでフォーカスを移動イベントを登録します。 – grey

関連する問題