0

これは私がよく遭遇する状況ですが、良い解決策が見つからないようです。ロールオーバーでわずかに拡大するムービークリップがありますが、ムービークリップの端にカーソルを合わせると、そこにとどまってちらつき、mouseOver および mouseOut イベントを継続的に受け取ります。これにどのように対処しますか?繰り返しになりますが、これは通常、ムービークリップまたはボタンのスケールをトゥイーンするときに問題になります。

my_mc.addEventListener(MouseEvent.MOUSE_OVER, mOver);
my_mc.addEventListener(MouseEvent.MOUSE_OUT, mOut);

private function mOver(m:MouseEvent) {              
   TweenLite.to(m.target, .2, { scaleX:1.1, scaleY:1.1} );
}

private function mOut(m:MouseEvent) {
   TweenLite.to(m.target, .2, { scaleX:1, scaleY:1} );
}
4

1 に答える 1

1

私はあなたが何を意味するのか知っています:クリップが拡大/縮小すると、アニメーション自体が不要な入力イベントを生成し、カーソルをクリップのサイズ変更されたhitTest領域の上または外に移動します。

いくつかのアイデア:

  1. クリアスプライトをオーバーレイしてボタン領域として機能し、コンテンツを含む別の子オブジェクトを拡大縮小します。
    つまり、マウス入力イベントが発生しているオブジェクトは一定のサイズのままです。視覚的なアーティファクトのみが寸法を変更します
  2. (より単純)遷移中にイベントハンドラーを削除し、TweenLiteアニメーションオブジェクトのonCompleteプロパティによって起動されるコールバック関数にそれらを再度追加します。
my_mc.addEventListener(MouseEvent.MOUSE_OVER, _animate);
my_mc.addEventListener(MouseEvent.MOUSE_OUT, _animate);

private function _animate(event:MouseEvent):void
{
    var mc:Sprite = event.target as Sprite;        
    var animScale:Number = (event.type == MouseEvent.MOUSE_OVER) ? 2 : 1;

    TweenLite.to(mc, 0.5, {
        onStart: function():void {
            mc.removeEventListener(MouseEvent.MOUSE_OVER, _animate);
            mc.removeEventListener(MouseEvent.MOUSE_OUT, _animate);
        },
        scaleX: animScale, 
        scaleY: animScale,
        onComplete: function():void {
            mc.addEventListener(MouseEvent.MOUSE_OVER, _animate);
            mc.addEventListener(MouseEvent.MOUSE_OUT, _animate);
        } 
    });
}
于 2009-09-09T23:27:50.330 に答える