2

7 つの画像がある円形のグラフィックがあります。次/前の画像でスピンして停止する必要があります。次/前の画像に到達するために必要な 50 度を超えて回転する必要があるため、360 度を追加しました。

この部分は正常に動作します。しかし、スピン中にモーション ブラー タイプのエフェクトを追加しようとすると、スピンが完了せずに停止することがあります。

問題は以下のようです(ただし、完全なコードも投稿しました)

// animate the blur
var myTween:Tween = new Tween(spinner, "blur", 
                            Regular.easeOut, 16, 0, 1.3, true);
myTween.addEventListener(TweenEvent.MOTION_CHANGE, applyBlur);

// animate the rotation
var spin:Tween = new Tween(spinner, "rotation", 
                         Regular.easeOut, 0, angle, 1.5, true);
spin.addEventListener(TweenEvent.MOTION_FINISH, hideSpinner);   

/* * * * * * * * * * * * * * * * * * * / // ref の完全なコード /* * * * * * * * * * * * * * * * * * * /

// import blur classes
import flash.display.Sprite;
import flash.filters.BitmapFilter;
import flash.filters.BitmapFilterQuality;
import flash.filters.BlurFilter;
import fl.transitions.TweenEvent;
import fl.transitions.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;


// set up the blur filter
var blurX:Number = 4;
var blurY:Number = 16;
var blur = new BlurFilter(blurX, blurY, BitmapFilterQuality.HIGH);
var targetAngle = 0;

//var targetAngles:Array = new Array(0,60,110,160,210,270,320);

// Track the last sandwich viewed
// these are the defaults to start with
var currentSandwich:MovieClip = this.sandwich1;
var nextSandwich:MovieClip = this.sandwich1;

// Show / Hide the spiner
up.addEventListener(MouseEvent.CLICK, revealSpinner);
down.addEventListener(MouseEvent.CLICK, revealSpinner);

function revealSpinner(event:MouseEvent):void
{ 
    // deactivate the buttons
    up.removeEventListener(MouseEvent.CLICK, revealSpinner);
    down.removeEventListener(MouseEvent.CLICK, revealSpinner);

    var angle:Number = 0;
    // set the rotation amount depending on what arrow was clicked
    if ( event.currentTarget.name == "up" ){
        angle = spinner.rotation + 360 + 51.42;
    } else {
        angle = spinner.rotation + -360 + -51.42;
    }
    trace(angle);

    // animate the blur
    var myTween:Tween = new Tween(spinner, "blur", Regular.easeOut, 16, 0, 1.3, true);
    myTween.addEventListener(TweenEvent.MOTION_CHANGE, applyBlur);

    // animate the rotation
    var spin:Tween = new Tween(spinner, "rotation", Regular.easeOut, 0, angle, 1.5, true);
    spin.addEventListener(TweenEvent.MOTION_FINISH, hideSpinner);   

}

function hideSpinner(event:TweenEvent):void
{   
    // reactivate the buttons
    up.addEventListener(MouseEvent.CLICK, revealSpinner);
    down.addEventListener(MouseEvent.CLICK, revealSpinner);

    // stop the listeners
    spinner.removeEventListener(TweenEvent.MOTION_FINISH, hideSpinner);
    spinner.removeEventListener(TweenEvent.MOTION_CHANGE, applyBlur);

    spinner.filters = [];
    //spinner.rotation = targetAngle;
}

function applyBlur(event:TweenEvent):void
{
    spinner.filters = [new BlurFilter(spinner.blur, spinner.blur, 1)];
}
4

2 に答える 2

1

Greensock Tweening Platform (以前の TweenLite/TweenMax) は優れたトゥイーン ライブラリです。複雑なトゥイーンの設定で問題が発生したことはありません。

于 2010-02-04T03:52:41.220 に答える
0

上記のトゥイーンが停止する理由が見つかりませんでした。しかし、これは別のパッケージhttp://code.google.com/p/tweener/を使用することで問題を解決しました

于 2010-01-04T16:46:49.353 に答える