2012-01-05 8 views
1

これを説明する方法がわからないので、まずコードを投稿して説明します。解決策は、しかしシンプルでなければなりませんので、私は..AS3 - Tweenと最も近い?

public function tweenUpdate():void{ 
      if (_currentFrame>=358) _currentFrame -= 359; 
      if (_currentFrame<0) _currentFrame += 359; 
      var myBitmap:Bitmap = new Bitmap(buffer[_currentFrame+1]); 
      myBitmap.smoothing = true; 
      imageBuffer.data = myBitmap; 
     } 

君たちは私がここでやろうとしているものを知っていると確信している、これはそれをトリガーするものです:だから

TweenLite.to(this, 2, {_currentFrame: 50, ease:Strong.easeOut, onUpdate:tweenUpdate, onComplete:tweenComplete}); 

、私は」私は_currentImage:intを見てみましょう。

現在のフレームからターゲットフレームまでトゥイーンしたいです。これは私のコードが今行っていることです(これまで私を助けてくれたshanethehatのおかげで)。

しかし、私は最短の方法でトゥイーンしたい!

例:フレーム10にあり、フレーム350に行きたい。 10-350(340フレームをスキップする)のかわりに、別の方法で10から350(フレーム0までスキップし、359から350にスキップし続けます)。

私はあなたが私がここで言うことをしようとしているものを得る願っています:私はそれが最高のものだかわからないが、P

答えて

0

はここで、一つの解決策です。私はこれを100フレームのMovieClipを使って軽くしかテストしなかったので、あなたのバッファー設定に適用するとうまくいきたいと思います。

import com.greensock.TweenLite; 
import com.greensock.easing.Strong; 

var _currentFrame:int = 1; 

function tweenTo($target:int):void 
{ 
    if(_currentFrame - $target > buffer.length - _currentFrame + $target) { 
     //quicker to loop from buffer.length to 0 
     _currentFrame = $target - (buffer.length - _currentFrame + $target); 
    } else if (buffer.length - $target + _currentFrame < $target - _currentFrame) { 
     //quicker to loop from 0 to buffer.length 
     _currentFrame = $target + (buffer.length - $target + _currentFrame); 
    } 
    TweenLite.to(this,2,{_currentFrame:$target,ease:Strong.easeOut,onUpdate:tweenUpdate}); 
} 

function tweenUpdate():void 
{ 
    var myBitmap:Bitmap; 
    if(_currentFrame < 1) { 
     myBitmap = new Bitmap(buffer[buffer.length + _currentFrame]); //_currentFrame is negative 
    } else { 
     myBitmap = new Bitmap(buffer[_currentFrame % buffer.length]); 
    } 
    myBitmap.smoothing = true; 
    imageBuffer.data = myBitmap; 
} 

tweenToメソッドを呼び出すたびにトゥイーンを開始します。これは、トゥイーンが自然に行うように移動するのではなく、開始点と終了点の間をジャンプすることによってターゲットへのより短いルートが存在するかどうかをチェックします。より速くなる場合は、_currentFrameの初期値が変更されます。

tweenUpdateメソッドでは、新しいビットマップは、バッファの最後から一定数の値を選択することによって作成されます。または、モジュラスを使用して、バッファ長より高い値が再計算されるようにします。

+0

ありがとうございました:) これは今のように動作しています! もう一度お時間をありがとう! –

0

あなたは次のようなことをしたいですか?

  • (未テストコード)((Math.abs(に、currentFrame場合

を移動するためにどの方向を決定 - 逆移動先はTargetFrame)>(全フレーム/ 2))//次に (存在かもしれません。方向に応じてより多くのロジックここで私が見渡せるんだけど、それは一般的な考えです)

  • スタートトゥイーンこと。

0を交差させる場合は、最初に現在の値からゼロまで、次に359からターゲットフレームまでのトゥイーンチェーンを持つことをお勧めします。