2012-01-05 98 views
1

不知道如何解釋這一點,所以我會先發布一些代碼,然後嘗試解釋。該解決方案應該是簡單的,所以我敢肯定,你們知道我想在這裏做..AS3 - 吐溫到最近?

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}); 

所以,我我得到了360圖像(但是我使用_currentFrame來確定要顯示哪個圖像,所以我們將看看_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

非常感謝您的幫助:) 它現在正在工作! 再次感謝您的時間,你們倆! – 2012-01-06 08:33:00

0

那麼你想要做類似下面的事情嗎?

  • 確定去哪個方向

(未測試的代碼)如果((Math.abs(設置currentFrame - targetFrame)>(總幀數/ 2))//然後轉到反向 (可能存在。這裏是更多的邏輯,我俯瞰,而是取決於方向

  • 開始補間是一般的想法)。

如果你要穿過0,我會建議有一個補間鏈,首先從當前值到零,然後從359到目標幀。