2009-04-20 9 views
1

観察された行動:マウスの下にあるボタンをアクティブにする:どのようにOVERイベントをキャプチャしますか?

  1. 私は、画面上にスライドするUIのページを持っています。
  2. スライドが完了したら、ボタンをアクティブにします。
  3. マウスはすでにボタンの上に、ロールオーバーは、(MOUSE_OVERが技術的に発生していないので)発生しません

望ましい行動場合: 1、2同じですが、3の上に、私は私のロールオーバーを参照してください。

これを簡単に行う方法はありますか?マウスを追跡し、すべてのボタンのdimsとの位置を比較するような、

ありがとうございます!

答えて

0

現在のマウス位置のx座標とy座標を使用して、最も上のコンテナにmouseMoveイベントを送出できます。これにより、マウスを動かしたユーザーのエフェクトがエミュレートされます。ボタンinitの

private function moveComplete():void 
{ 
    topLevelContainer.dispatchEvent(new MouseEvent(MouseEvent.MOUSEMOUSE, true, false, topLevelContainer.mouseX, topLevelContainer.mouseY); 
} 
+0

私はそれが私を助ける方法を見ません。それがmouseMoveの場合、インタラクティブなオブジェクトを残したことはありませんが、私はそれをどうしますか?私はまだx + yとすべてのボタンの制約を比較する必要があります。 –

+0

なぜですか?topLevelContainerはMOUSE_MOVEイベントを受け取ると、移動したUIボタンである子にそのイベントを伝えます。これにより、それぞれのボタンでMOUSE_OVERイベントが発生し、ロールオーバー効果が発生します。 – CookieOfFortune

+0

ええと...申し訳ありませんが、クッキー、私はそれを試したが、ダイスはありませんでした。正しく実装しているかどうかわからない。マウスがすでに希望のボタンの上にあることを考えれば、これがMOUSE_OVERをどのように引き起こすかはまだ分かりません。 また、スライドボタンにリスナーを追加して、topLevel MOUSE_MOVEをリッスンすることを意味しますか? –

0

私は、プライベートするvar _boundsを設定します。

_bounds = getBounds(this); 

アクティブに、私が呼ん:

if (isMouseOver()) doOver(true); 

、その後、機能:

private function isMouseOver():Boolean { 
    //trace ("isMouseOver:"); 
    var xBool:Boolean = _bounds.left < mouseX && mouseX < _bounds.right;  
    var yBool:Boolean = _bounds.top < mouseY && mouseY < _bounds.bottom; 
    //trace (" - xBool: " + xBool); 
    //trace (" - yBool: " + yBool); 
    return xBool && yBool; 
} 
0

ますあなたのマウスのデフォルトパラメータを設定することができます新しいイベントを作成してディスパッチして同じコードを実行する必要はありません( )。

myBtn.addEventListener(MouseEvent.MOUSE_OVER, btnOverHandler); 

function btnOverHandler(e:MouseEvent = null):void{ 
trace('do stuff on roll over!'); 
} 

//then you can do this wherever you need 
btnOverHandler(); 

両方の状況で(MouseEvent、またはnot)動作するはずです。

そしてマウスオーバーの場合、getObjectsUnderPointは便利です。これは、この特定の例に必要なもの(さらに長いもの)以上のものですが、それが存在することを知っておくと良いことです。

function isMouseOver(target:DisplayObject,container:DisplayObjectContainer):Boolean{ 
    var isOver:Boolean = false; 
    var pt:Point = new Point(mouseX, mouseY); 
    var objects:Array = container.getObjectsUnderPoint(pt); 
    for(var i:int = 0 ; i < objects.length; i++){ 
     if(objects[i] == target) { 
     isOver = true; 
     break; 
     } 
    } 
    return isOver; 
} 

希望します。

0

UIが滑落したときあなたは

slidingUI.mousenabled = false 
slidingUI.mousechildren = false 

これは、コンポーネントがスライドしたときの下ボタンのロールオーバーイベントを可能にする、次のプロパティを変更することができます。後で必ずプロパティをtrueにリセットしてください。 これがあなたの探しているものかどうかは分かりませんが、それは便利なものです。

関連する問題