0

AS3 では GreenSock の TweenMax、iOS では Flash AIR 3.2 を使用しています。autoAlpha最初から最後までではなく、トゥイーンの移動中に特定の時点 (トゥイーンの中央に達した後など) にプラグインを使用して、テキストの文字列がフェードを開始するようにしようとしています。現時点では、動きとアルファの両方を開始位置から終了までトゥイーンしています。これは可能ですか?

TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1, autoAlpha:0.5});

編集:これは関数と構文が修正された現在のコードですが、何らかの理由で機能しません。まだ動きのトゥイーンがありますが、アルファはもうトゥイーンしていません。ただし、ロジックは正しいようです。(後者で機能するため、alpha現在は置き換えられています)。autoAlpha

import com.greensock.events.TweenEvent;
import com.greensock.TweenMax;

var _middle:Boolean = false;
var _tween:TweenMax;

public function run():void {
    _tween = TweenMax.to(textOne, 14, {x:xScreenPosEnd, ease:SlowMo.ease.config(1, 0), repeat:-1});
    _tween.addEventListener(TweenEvent.UPDATE, updateListener);
    _tween.addEventListener(TweenEvent.REPEAT, repeatListener);
}

function updateListener(e:TweenEvent):void {
    if(_tween.totalProgress() > 0.5 && _middle == false) {
        TweenMax.to(textOne, 7, {ease:SlowMo.ease.config(1, 0), repeat:-1, alpha:0});
        _middle = true;
    }
}

function repeatListener(e:TweenEvent):void {
    textOne.alpha = 1.0;
    _middle = false;
}

編集:アルファトゥイーンtotalProgress()に置き換えられましたがprogress()、アルファトゥイーンには別の問題があります。デバッグするためにと の両方textOne.alphaをトレースしました。_tween.progress()AS3 のシングルスレッドの性質のためか、各ループの最後で呼び出しロジックを台無しにしています...アルファ トゥイーンの終了が遅れているため、REPEAT 呼び出しは時間内にアルファを 1 に設定できません。 、進行トゥイーンが開始する前。または、それは間違っているロジックの何かです。TextOneの(アルファ)トゥイーンタイムを6にしてみましたが、それでもめちゃくちゃです。

実際、もう少し考えてみると、何が起こっているのかよくわかりません。論理的な意味はありません。最初のアルファトゥイーンは問題ありませんが、繰り返しでめちゃくちゃになり、アルファトゥイーンを(ただし間違ったprogress()位置で)数回繰り返し、その後永遠に0のままになります。トレースのスナップショットは次のとおりです。

ALPHA: 0.0078125
PROGRESS: 0.9979285714285714
MIDDLE: true
...
ALPHA: 0
PROGRESS: 0.9992857142857144
MIDDLE: true

アルファ: 0
プログレス: 0.00028571428571438115 ミドル
: true

アルファ: 0
進行状況: 0.000714285714285826 中間
: false

ALPHA: 0.99609375
PROGRESS: 0.0015714285714287155
MIDDLE: false
...
ALPHA: 0.1015625
PROGRESS: 0.4504285714285715
MIDDLE: false

ALPHA: 0.09765625
PROGRESS: 0.4515714285714285
MIDDLE: false
...
ALPHA: 0.00390625
PROGRESS: 0.4992142857142858
MIDDLE: false

アルファ: 0
進行状況: 0.5003571428571431 中間
: false

4

2 に答える 2

1

TweenMax.to()2 つの呼び出しを使用するだけです。1 つにdelay:パラメータを指定し、小さい値を に指定しますduration

于 2013-02-04T19:12:27.553 に答える
0

最初の TweenMax.to を保存し、TweenEvent.UPDATE イベントのリスナーをアタッチすることができます。これにより、トゥイナーが値を変更するたびに呼び出される関数を取得できます。

次に、currentProgress の値を取得し、値が 0.5 を超えているかどうかを確認し (これは、トゥイーンの中央を超えたことを意味します)、2 番目のトゥイーンを開始します。bool 変数が必要なので、これは中間トゥイーンごとに 1 回だけ行います。

TweenEvent.REPEAT イベントに別のリスナーを追加して、トゥイーンが繰り返される場合にアルファ オブジェクトの値を 1 にリセットできます。

var middle:Boolean = false;
TweenMax tween = TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1});
tween.addEventListener( TweenEvent.UPDATE, updateListener );
tween.addEventListener( TweenEvent.REPEAT, repeatListener );

function updateListener( e:TweenEvent ):void
{
  if( tween.currentProgress > 0.5 && middle == false )
  {
   TweenMax.to(textOne, 7, {ease:SlowMo.ease.config(1, 0), repeat:0, autoAlpha:0});
   middle = true;
  }
}

function repeatListener( e:TweenEvent ):void
{
 textOne.alpha = 1.0;
 middle = false;
}

お役に立てれば

于 2013-02-08T18:20:07.027 に答える