4

インターフェイスの上部にドッキングされた DisplayObject があり、デバッグ情報 (フレーム/秒など) を表示し、60% のアルファで半透明です。

このサーフェスの下にあるアイテムを操作して、マウスがその上を移動すると、10% のアルファに暗くなり、マウス イベントが下にあるオブジェクトに渡されるようにしたいと考えています。

通常、このデバッグ情報パネルの mouseEnabled および mouseChildren プロパティを false に設定しているので、その下のオブジェクトはマウス イベントを受け取ります。

問題は、マウスがロールオーバーしたときに非表示にするために、mouseEnabled を true に設定する必要があることです。ただし、mouseEnabled が true の場合、マウス イベントはその下にあるオブジェクトによって取得されません。

私が知る限り、mouseEvents を選択的に有効にすることはできないため、すべてを受け取るか、まったく受け取らないかのどちらかです。つまり、そのアプローチを採用した場合、すべてのイベントを処理して転送する必要があります。

mouseEnabled プロパティに「ピーク」モードか何かがあれば、それが上にある場合にイベントを受け取るだけでなく、下のオブジェクトに渡すこともできます。

4

6 に答える 6

1

DisplayObject が持っている場合、mouseEnabled=trueそのイベントはcontainerオブジェクトの下にあるもの以外に送信されます。したがって、このソリューションは機能しません。最善の解決策は、ここでgetObjectsUnderPoint説明されているように手動でイベントを再ルーティングすることです。

私はこのアプローチをマルチタッチ アプリで何年も使用してきました。複数のタッチ ポイントがあるため、プロセッサのオーバーヘッドは見られません。カーソルは 1 つしかありません。

于 2012-03-09T08:52:43.553 に答える
0

あなたの痛みが分かります。残念ながら、特定のマウスイベントを有効/無効にする方法がわかりません。ただし、このソリューションで創造性を発揮することはできます。たとえばMOUSE_MOVE、ステージにリスナーを追加して、マウスの座標を追跡してみてください。次に、stageX,stageYマウスがパネルの領域にある場合は、可視性を設定します。getObjectsUnderPoint()また、マウスの下にあるオブジェクトを判別するために使用できる場合もあります。しかし、私の推測では、各フレームの反復でそれを実行することは、プロセッサで少し激しくなるでしょう。

于 2012-03-08T23:11:13.243 に答える
0

私はあなたが探していると信じていますmouseEnabled = false
しかし、あなたができるもう1つの最後の溝の試みは、マウスオーバーで画面の反対側に移動することです.

于 2012-03-08T23:01:41.703 に答える
0

私はあなたがこの表示階層を持っていると仮定しています:

Debug Window
    Debug Control 1
    Debug Control 2
    ...
    Overlay

オーバーレイを DebugWindow のマスクにして、mouseEvents を DebugWindow 自体にアタッチしてみませんか? インスピレーションについては、このページを参照してください: http://blog.shaperstudio.com/2010/11/as3-inverse-mask/

于 2012-03-09T00:01:49.107 に答える
0

私はこれと同じ問題を抱えていました..特定のオブジェクトの上にマウスがあることを確認する関数を作成しました:

    public function isMouseOverObject(mPos: Point, pObject:DisplayObject, pContainer:DisplayObjectContainer) {

        var under_objects:Array = pContainer.getObjectsUnderPoint(mPos);
        var is_under:Boolean = false;

        for (var i:int = 0; i < under_objects.length; i++) {
            if (under_objects[i] == pObject) {
                is_under = true;
                break;
            }
        }

        return is_under;
    }
于 2013-11-25T08:10:22.917 に答える
0

理想的ではありませんが、フレーム入力リスナーを追加して、フレームごとにマウスの位置を確認する方法があります。次の行に沿ったもの:

stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);


private function onEnterFrame(e:Event):void {
    if(mouseX > width || mouseY > height){
        //hide stats
    }
}
于 2012-03-08T23:46:32.230 に答える