About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Jul

    28

    Flash 中有时为了提高性能,采用延迟刷新,一个 callLater 全局函数与 一个 CallLater 类的下载: 延迟刷新.rar

    我比较喜欢这个类:

    package
    {
        import flash.display.Shape;
        import flash.events.Event;
        import flash.utils.Dictionary;

        public class CallLater extends Shape
        {
            protected static var _instance:CallLater;
            protected var callLaterHash:Dictionary;

            public function CallLater()
            {
                callLaterHash = new Dictionary();            
            }

            //p_frameDelay需要被延迟的帧数
            public static function call(p_function:Function, p_frameDelay:uint = 1, p_params:Array = null):void 
            {
                getInstance().call(p_function, p_frameDelay, p_params);
            }


            public function call(p_function:Function, p_frameDelay:uint, p_params:Array):void
            {
                callLaterHash[p_function] = new CallLaterData(p_frameDelay, p_params);

                if (hasEventListener(Event.ENTER_FRAME) == false) { 
                    this.addEventListener(Event.ENTER_FRAME, onFrame);
                }
            }

            protected function onFrame(p_event:Event):void 
            {
                var hasRun:Boolean = false;

                for (var func:Object in callLaterHash) 
                {
                    hasRun = true;
                    var obj:CallLaterData = callLaterHash[func] as CallLaterData;
                    if (--obj.delay == 0) 
                    {
                        if (obj.params != null) 
                        {
                            (func as Function).apply(null, obj.params);

                        } else {
                            func();
                        }
                        delete callLaterHash[func];
                    }
                }

                if (hasRun == false) 
                { 
                    removeEventListener(Event.ENTER_FRAME, onFrame)
                }
            }


            protected static function getInstance():CallLater {

                if (_instance == null) 
                {
                    _instance = new CallLater()
                }

                return _instance;
            }
        }
    }


    internal class CallLaterData  
    {
        public var delay:int;
        public var params:Array;

        public function CallLaterData(p_delay:uint, p_params:Array)
        {
            delay = p_delay;
            params = p_params;
        }
    }

    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

    19

    Tweener 类的下载(带API): Tweener.rar

    以下为transition 参数可视化表现形式 

    Jul

    17

    新旧版本 TweenLite

    • 1 Comments
    • Flash Platform

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

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

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

    Jul

    16

    在AS3中可以通过一个var 定义多个变量,但每个变量必须注明类型 

    var a:int,b:int;//正确
    var a:int,b:String;//正确
    var a,b:int;//虽然也正确,但a不会有代码提示,编译时也不会进行类型检查;并却运行时它是一个无类型变量

    More...

    Jul

    15

    国产轻量级Flash UI组件 FlashSwing

    • 0 Comments
    • Flash Platform

    国产轻量级 Flash UI 组件 FlashSwing 地址:http://www.shinater.com/

    优点:

    1、国产,所以 API 全中文说明。

    2、能与官方基于 fl 包的组件很好的兼容。

    3、能与基于官方 fl 包的第三方包很好的兼容,比如雅虎的组件。

    缺点:

    目前没有发现它包含自动布局组件

     

    其它更多 的第三方资源《AS3 第三方组件与类库资源

    Jul

    14

    在 Flash 中实现手写输入

    • 0 Comments
    • Flash Platform

    Jul

    5

    Flex3 组件和框架的生命周期

    • 0 Comments
    • Flash Platform

    由于Flex3 与 Flex4 采的是相同的底层失效机制,并且 Flex4 halo 与 Spark、以及其它风格组件,以及第三方的 FlexLib 组件,等都采用的相同的底层 UIComponent 类 ,所以《Flex3 组件和框架的生命周期》中的内容是适用于所有以上情况的。

    英文原版地址:http://www.developmentarc.com/site/sites/default/files/understanding_the_flex_3_lifecycle_v1.0.pdf

    译文原版地址:http://blog.csdn.net/lixuekun820/article/details/5612004

    由于该份资料对生命周期写的非常详细,为方便收藏和共享,也为了使用目录更方便的阅读,弄了一个离线下载版本。

    离线下载版本的链接:Flex_Component_Lifecycle.rar

    More...

    Jul

    4

    IT语录(二)

    • 0 Comments
    • Miscellaneous

    Don’t succumb to the false authority of tools or models. There’s no substitute for creativity, intuition, and inventiveness. Keep in mind that the context of the application is critical. There comes a point where architectural rules become counterproductive by diminishing creativity.

    不要迷信任何工具、模型、框架,什么都不能代替创造力、直觉和独创性(这一条应该尤其实是适合 Flash Platform 相关人员了,因为该平台是一个完完全全的视觉艺术平台)。

    Jul

    4

    IT语录(一)

    • 0 Comments
    • Miscellaneous

    If you focus on the business, the tool will present itself.

    如果你关注业务,工具就会自动呈现在你面前。