首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3 - Tween到最接近?

AS3 - Tween到最接近?
EN

Stack Overflow用户
提问于 2012-01-05 22:43:45
回答 2查看 191关注 0票数 1

我不确定如何解释这个问题,所以我将先发布一些代码,然后再尝试解释。不过,解决方案应该很简单,所以我相信你们都知道我要做的是什么。

代码语言:javascript
复制
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;
        }

这就是触发它的原因:

代码语言:javascript
复制
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)。

我希望你明白我在这里想说的:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-05 23:17:06

这里有一个解决方案,尽管我不确定它是不是最好的。我只使用100帧的MovieClip进行了轻微的测试,所以我希望它在应用于缓冲区设置时可以正常工作。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-01-05 23:25:37

那么,你想做一些类似于下面的事情吗?

  • 确定

的前进方向

(未测试代码) if((Math.abs(currentFrame - targetFrame) > (total frames / 2)) //然后反向。(这里可能有更多的逻辑,我忽略了,但这是一般的想法)

  • 开始根据方向进行补间。

如果你要跨越0,我建议你有一个补间链,首先从当前值到0,然后从359到目标帧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8744345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档