ActionScript
TypeScript
JavaScript

定时执行

发布时间:2017-03-08

        时钟管理类laya.utils.Timer中关于定时执行有两种方法,分别为按时间定时执行once()和按帧率定时执行frameOnce()。对于重复的调用,这两种方法默认是排重的,只执行一次,可以设置参数更改。我们先看下这两种方法的API参数说明,如下图所示:

blob.png


按时间定时执行代码示例:

package
{
        import laya.display.Sprite;
        import laya.display.Text;
        import laya.webgl.WebGL;

        public class TimerDEMO
        {
                private var flag:Boolean;
                
                public function TimerDEMO()
                {
                        Laya.init(1136, 640, WebGL);                        
                        Laya.stage.bgColor = "#ffffff";
                        
                        createRect();
                        for (var i:int = 1; i < 5; i++)
                        {
                                //延迟1秒后创建一个矩形
                                Laya.timer.once(1000, this, createRect);
                        }
                        
                }
                
                private function createRect():void
                {
                        var c:Sprite = new Sprite(); 
                        var color:String = (flag = !flag)?"#A52A2A":"#FFA500"
                        c.graphics.clear();
                        c.graphics.drawRect(50, 50, 300, 100, color);
                        Laya.stage.addChild(c);
                }
        
        }
}


按帧率定时执行代码示例:

package
{
        import laya.display.Sprite;
        import laya.display.Text;
        import laya.webgl.WebGL;

        public class TimerDEMO
        {
                private var flag:Boolean;
                
                public function TimerDEMO()
                {
                        Laya.init(1136, 640, WebGL);                        
                        Laya.stage.bgColor = "#ffffff";
                        
                        createRect();
                        for (var i:int = 1; i < 5; i++)
                        {
                                //延迟60帧后绘制一个矩形
                                Laya.timer.frameOnce(60, this, createRect);
                        }
                        
                }
                
                private function createRect():void
                {
                        var c:Sprite = new Sprite(); 
                        var color:String = (flag = !flag)?"#A52A2A":"#FFA500"
                        c.graphics.clear();
                        c.graphics.drawRect(50, 50, 300, 100, color);
                        Laya.stage.addChild(c);
                }
        
        }
}


两个示例的运行效果基本相同,如下面两张图所示:

blob.png

  • 延迟前初始化绘制的褐色矩形


blob.png

延迟后重新绘制的橙色矩形



  •         通过上面的两段示例代码,我们发现除按时间和按帧率的定时区别外,两种方法的使用与运行效果基本相同,在处于循环中多次调用时,均只执行了一次。

  •        由于游戏帧率在不同设备上的不稳定性,当播放帧动画等情况时,采用按帧率定时会更准确一些。