About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jan

    31

    缓动函数,也叫缓冲函数。点击查看

    More...

    Sep

    8

    Starling 自带的 Tween vs. TweenLite

    • 0 Comments
    • Flash Platform

    测试结果 TweenLite 略高于 Starling 自带的 Tween 补间类,在 Y460 笔记本上生成 3000 个对象同时运动,TweenLite 稳定时在 17 fps左右,而 Tween + juggler 只有 14 fps左右。

    package
    {
        import com.greensock.TweenLite;

        import flash.display.BitmapData;
        import flash.geom.Rectangle;

        import starling.animation.Transitions;
        import starling.animation.Tween;
        import starling.core.Starling;
        import starling.display.Image;
        import starling.display.Sprite;
        import starling.textures.Texture;

        public class StarlingMain extends Sprite
        {
            public function StarlingMain()
            {
                super();
                var bm:BitmapData = new BitmapData(1010, false,0 );
                    bm.fillRect(new Rectangle(1188), 0xFF0000);

                var t:Texture = Texture.fromBitmapData(bm);
                var n:Image;

                for (var i:int = 0 ; i <= 3000 ; i++ ) {
                    n = new Image(t);
                    addChild(n);

                    tweenStarling(n)//Starling Tween 测试
                    //tweenGreenSock(n); // Greensock TweenLite 测试
                }    
            }

            private function tweenStarling( obj:Image ):void {
                var tw:Tween = new Tween(obj, 1+(Math.random()*3), Transitions.EASE_OUT );
                tw.moveTo( Math.random() * 480 , Math.random() * 762);
                tw.onComplete = tweenStarling;
                tw.onCompleteArgs = [obj];
                Starling.current.juggler.add(tw);
            }

            private function tweenGreenSock( obj:Image ):void {
                var tw:TweenLite = new TweenLite(obj, 1 + (Math.random() * 3) , {
                    x:Math.random() * 480 ,
                    y: Math.random() * 762 ,
                    onComplete:tweenGreenSock ,
                    onCompleteParams:[obj]
                } );
            }
        }
    }

    Jul

    19

    最近的项目中用到了需要平滑效果的补间类,虽然 Flash 也内置了 Tween 类,不过功能太简单,从语法上来说它无法在一行代码上一次性设置多个属性的变化,所以就直接放弃了它。

    然后选中在各论坛比较流行的两个类,TweenLite 大于 Tweener,它们的语法非常类似。并且在 greensock 官方网站上给出了一个测试不同补间类的一个实际 SWF 文件,在那个演示文件中是同时运行多个简单对象,发现运行对比 TweenLite 的效率以压倒性的优势胜于 Tweener,不过 TweenLite 本身就是 greensock 开发的,所以在他们官方网站给出的演示文件肯定是对 TweenLite 有利的(毕竟 TweenLite 有很多插件是商业性的)。

    但我在自己的实际项目中测试发现,TweenLite 的高性能是针对 TweenLite 多个对象的,并非真正的从对象的复杂性出发,会导致跳帧的现象,也就是说,如果只创建一个对象,而这个对象中包含了数千个复杂图形对象和位图时,TweenLite 就会出现跳帧现象,甚至直接跳过中间补间,只出现头和尾两帧。而在实际的测试中发现 Tweener 虽然性能底,但却会将动画完整的表现出来,也就会等待补间动画的刷新完成,所以它会出现一卡一卡的现象,当然动画时间比较短的话,这种一卡一卡的现象还是可以勉强接受的,毕竟是数千个复杂图形和位图对象。所以 greensock 官方网站上创建的多个 TweenLite 对象但只包含简单图形的情况并不能真正的作为项目中是否应该应用 TweenLite 的依据。

    最终我选择了 Tweener,因为我的数千个复杂图形和位图对象只出现在gotoAndStop()的某一帧,也就是只会卡一下,大约0.5秒,但却可以完美的表现最终的动画,而 TweenLite 却在卡帧之后直接跳过了整个补间动画,只有头和尾两帧。Tweener,nice :)

    Jul

    17

    新旧版本 TweenLite

    • 1 Comments
    • Flash Platform

    有人喜欢旧版的 TweenLite,因为它简单方便只有一个类;新版本的功能更多一点,各个类的功能也分的更清晰一些,但新版本中不少插件是收费的。

    旧版本的: TweenLite旧版(单个类).rar

    新版本的:TweenLite-greensock-as3(新版).zip