我不确定如何解释这个问题,所以我将先发布一些代码,然后再尝试解释。不过,解决方案应该很简单,所以我相信你们都知道我要做的是什么。
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)。
我希望你明白我在这里想说的:
发布于 2012-01-05 23:17:06
这里有一个解决方案,尽管我不确定它是不是最好的。我只使用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方法中,通过从缓冲区末尾选择一个特定数字的值来创建新的位图,或者使用模数来确保重新计算大于缓冲区长度的值。
发布于 2012-01-05 23:25:37
那么,你想做一些类似于下面的事情吗?
的前进方向
(未测试代码) if((Math.abs(currentFrame - targetFrame) > (total frames / 2)) //然后反向。(这里可能有更多的逻辑,我忽略了,但这是一般的想法)
如果你要跨越0,我建议你有一个补间链,首先从当前值到0,然后从359到目标帧。
https://stackoverflow.com/questions/8744345
复制相似问题