2011-02-19 4 views
0

私は、Flashが特定の方法で動作する理由についていくつかの洞察を得ることを望んでいました。ここではシナリオがある:あなたが...マウスボタンを押したままにすると、SimpleButtonsが状態の検出を停止するのはなぜですか?

1)ステージにのSimpleButtonを追加して、SWF
2を参照)、その後、ボタンの境界線
3のマウスボタンダウンOUTSIDEを押して保持している場合)をドラッグしますマウスボタンを押したままSimpleButtonにカーソルを合わせます。

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

これは抽象であり、あなたがすべて興味がある場合(これは質問では詳しく述べませんが、実用的なシナリオを視覚化するのに役立ちます)、質問の動機は何か、私が構築しているアプリケーションです。このアプリでは、ユーザーはビデオサムネイルをドラッグして順序を並べ替えることができます。ユーザがビデオクリップのドラッグを開始すると、ビジュアルインジケータがアクティブになるので、ユーザがマウスボタンを離したときにクリップがどこに置かれるかをユーザが知る(例えば、クリップが位置1にあり、ユーザがクリップをクリップ4と5の間にドラッグするビジュアルインジケータ - シンプルボタン - 理想的には、ユーザがマウスボタンを離すとクリップ4と5の間にドロップされることをユーザに示します)。

洞察をお寄せいただきありがとうございます。

答えて

1

実際には、マウスボタンがクリックされた場所に関係なく、MOUSE_OVERイベントが発生します(シンプルなトレースを持つイベントリスナーを追加するだけです)。SimpleButtonは可視状態を変更しません。

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

+0

ありがとう、私の友人!私はこのシナリオでupStateを表示しない理由が残っていると思いますが、あなたの応答はそれにもかかわらず非常に良い洞察です! –

+0

ようこそ。私はボタンがドロップターゲットとして動作することを意図していなかったと思います。あなたはいくつかのonDragOverメソッドが必要ですが、単純なボタンです。あなたはAdobeに依頼しなければならないだろう;) – weltraumpirat

0

MOUSE_MOVEイベントハンドラを作成し、カーソル座標がボタン境界の内側にあるかどうかをチェックすることができます(また、それらが「オーバー」状態になっている場合)。
MOUSE_MOVEボタンインスタンスのリスナーが押されている間もマウスを検出する可能性があります

0

ドラッグされたアイコンとビジュアルインジケータの間の単純なhitTestは、マウスで

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

がダウンして、あなたがその関数のenterFrameイベントリスナーを設定し、マウスのリリースでそれをクリアすることができます:

あなたはこのようなものを持つことができます。

関連する問題