Tweening过度缓动效果

3 篇文章 0 订阅
1 篇文章 0 订阅

              Tweening过度缓动效果

1.        首先介绍easing缓动效果。


要实现如上效果,必须把目标对象按设定的时间阀值内移动到指定的位置,该曲线随着时间的推移,速度越来越快,实现这种效果必须用到二次方程。

下面是构造函数中核心代码。

_sprite.addEventListener(Event.ENTER_FRAME,executeAll);

 

       public static function executeAll($e:Event = null):void {

           var t:uint = _curTime = getTimer();

           trace("executeAllTime:"+t);

           render(t);

       }

//     t为当前时间var t:uint = _curTime = getTimer();

       public function render($time:uint):void {

           var time:Number = ($time - this.startTime) / 1000, factor:Number, tp:Object,i:int;

//当当前对象执行缓动运动的时间大于持续的时间时,设定此时的系数factor1,这样ball就到达了指定的目标位置。当然时间也不是绝对准确的。但是误差人的肉眼是观察不出来几毫秒到顶多几十毫秒的差别的。而且这个数字也是在可以接受范围之内。

           if (time >= this.duration) {

              time = this.duration;

              factor = 1;

           } else {

//            这里调用缓动函数, factor在这里是返回一个系数,随着时间推移factor不断增大,factor趋向于1,ball球就到达了其指定位置。此时刚好到达设定的duration

              factor = easeOut (time, 0, 1, this.duration);

              trace("factor:"+factor);

             

           }

//change变化率就是指初始化时,源位置离目标位置的距离changeX=targeg.x-ball.x

  changeY=Target.y-ball.y

              Ball.x = ball.x + (factor * changeX);

               Ball.y = ball.y +(factor * changeY);

       }

 

 

 

 

       public static function easeOut($time:Number, $begin:Number, $change:Number,$duration:Number):Number {

//         factor = this.vars.ease(time, 0, 1,this.duration);   var time:uint =_curTime = getTimer();

//             getTweenPosition = function (time,begin, change,duration)

           trace("$time:"+$time);

           trace("$begin:"+$begin);

           trace("$change:"+$change);

           trace("$duration:"+$duration);

           return -$change * ($time /= $duration) * ($time - 2) + $begin;

       }

 

Ball代码为:

 

package {

    import flash.display.Sprite;

    import gs.TweenLite;

   

    public class Ball extends Sprite {

       public var radius:Number;

       private var color:uint;

       public var vx:Number = 0;

       public var vy:Number = 0;

      

       public function Ball(radius:Number=40, color:uint=0xff0000) {

           this.radius = radius;

           this.color = color;

           init();

//         TweenLite.to();

       }

       public function init():void {

           graphics.beginFill(color);

           graphics.drawCircle(0, 0, radius);

           graphics.endFill();

       }

    }

}

 

注解:此上为核心代码。也是主要思想所在。其他的缓动函数或其他效果也是如此设计思想。我是根据学习分析TweenLiteAS3代码得出的结论。因为他们代码比较多而且复杂。我就简化了工作。有不便之处请与我联系309921583

TweenLiteAS3下载地址为:http://blog.greensock.com/tweenliteas3/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值