0

Flash が特定の方法で動作する理由について、ある程度の洞察を得たいと思っていました。シナリオは次のとおりです。

1) SimpleButton をステージに追加し、SWF を表示します
2) ボタンの境界
の外側でマウス ボタンを押したままにします 3) 次に、マウス ボタンを押したまま、SimpleButton の上にカーソルをドラッグします...

...すると、ステージ上の SimpleButton はマウスオーバーを検出せず、「オーバー」状態を表示します。アイドル状態のままです。どうしてこれなの?そして、マウスボタンが押されたままの状態でSimpleButtonがオーバー状態を表示できるようにし、カーソルをボタンの上に移動させる方法はありますか?

これは要約です。興味があれば (これは質問を詳しく説明するものではありませんが、実際のシナリオを視覚化するのに役立つかもしれません)、何が質問の動機になっているのか、それは私が構築しているアプリケーションです。このアプリでは、ユーザーはビデオのサムネイルをドラッグして順番を並べ替えることができます。ユーザーがビデオ クリップのドラッグを開始すると、ビジュアル インジケーターがアクティブになり、ユーザーがマウス ボタンを放したときにクリップが配置される場所がわかります (たとえば、クリップは位置 1 にあり、ユーザーはそれをクリップ 4 と 5 の間でドラッグします)。 . 視覚的なインジケータ (SimpleButton) は、理想的には、ユーザーがマウス ボタンを離すとクリップ 4 と 5 の間にドロップされることをユーザーに示します)。

洞察をありがとう!

4

3 に答える 3

1

実際には、マウスボタンがクリックされた場所に関係なく、MOUSE_OVERイベントは問題なく発生します(単純なトレースでイベントリスナーを追加するだけです-そこにあります!)-SimpleButtonは表示状態を変更しません。

ボタンの動作を変えたい場合は、リスナー関数を作成し、状態を手動で変更する必要があります。SimpleButtonクラスを拡張し、set downState、upState、およびoverStateをvisible = true;visible = false;目的の動作に最も適した組み合わせに追加できます。

于 2011-02-19T22:25:03.190 に答える
0

ドラッグしたアイコンと視覚的なインジケーターの間の単純な hitTest は、そのようなことには問題なく機能します。

次のようなものがあります。

function myHitTest(e:Event):void {
    if (myButton.hitTestObject(myVisualIndicator)) {
        myVisualIndicator.visible=true;
    } else {
       myVisualIndicator.visible=false;
    }
 }

マウス ダウンで、その関数の enterframe イベント リスナーを設定し、マウスを離すとクリアできます。

于 2011-02-19T21:43:41.650 に答える
0

イベント ハンドラーを作成し、MOUSE_MOVEカーソル座標がボタンの境界内にあるかどうかを確認することができます (また、ボタンの境界内にある場合は、「オーバー」状態を切り替えます)。
またMOUSE_MOVE、ボタンインスタンスのリスナーは、ボタンが押されている間でもマウスオーバーを検出する場合があります

于 2011-02-19T19:16:56.070 に答える