0

フラッシュアプ​​リケーションで自分のボタンを作ろうとしています。ここにいくつかのコードがあります:

addEventListener(MouseEvent.MOUSE_OUT, Out);
addEventListener(MouseEvent.MOUSE_OVER, Over);

...

private function Over(event:MouseEvent):void
{
    addChild(overImage);
}

private function Out(event:MouseEvent):void
{
    removeChild(overImage);
}

このボタンの上にマウスを置くと、overImageが点滅します。Overのように見え、Out各フレームを呼び出しています。私は何が間違っているのですか?

4

4 に答える 4

3

マウスがoverImage表示されるポイントに配置されている場合、その子オブジェクトはMOUSE_OVERそれ自体でイベントを引き起こし、したがってMOUSE_OUTその親でイベントを引き起こします。親は表示リストからMOUSE_OUTを削除します。これにより、親が再びオーバーになり、ループが再び開始され、が点滅します。overImageMOUSE_OVERoverImage

于 2012-12-21T03:46:14.990 に答える
1

これをFlexでタグ付けしたので; フレックスボタンを使ってみませんか?

MouseOverイベントは、マウスが移動すると継続的に発生します。addChildを呼び出す前にチェックを実行して、overImageがすでに親になっているかどうかを確認します。

private function Over(event:MouseEvent):void
{
   if(!overImage.parent){
    addChild(overImage); 
   }
}

private function Out(event:MouseEvent):void
{
    if(overImage.parent){
     removeChild(overImage);
    }
}

それで「まばたき」が防げると思います。

于 2012-12-21T03:47:38.003 に答える
1

他の人が言ったように、代わりにROLL_OVERとROLL_OUTを使用するか、button.mouseChildren=falseを設定します。

点滅している理由は、MOUSE_OVERとMOUSE_OUTがそのボタンのすべての子に対して実行されるためです。したがって、テキスト、bg画像/色、輝き、またはその他の要素が内部にある場合、それらのパーツのいずれかをロールオーバーするたびに、それが発火します。

したがって、「overImage」を追加すると、マウスの下に表示され、別のmouseOutとmouseOverが起動します。ここでも、ROLL_OVERとROLL_OUTを使用するか、mouseChildren=falseを設定します。

于 2012-12-21T07:41:44.450 に答える
0

MouseEvent.ROLL_OVERMouseEvent.ROLL_OUTイベントの使用を検討してください。コンポーネントの子を無視します。追加のチェックや醜いトリックなし。

ちなみに、ボタンはスキンと状態をサポートしているので、画像を「オーバー」状態に含めることができます。

于 2012-12-21T07:05:38.940 に答える