2012-01-05 70 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到目标帧。