ActionScript
TypeScript
JavaScript

延迟调用callLater

发布时间:2017-03-07

        延迟调用callLater()是时钟管理类laya.utils.Timer中的一个常用方法。callLater是在本帧渲染之前,延迟调用某个回调函数,同一个回调函数是排重的,只会被调用一次。在涉及重复调用某个函数,使用延迟调用方法可避免重复运算或重复渲染,从而达到性能优化的目的。我们先看下该方法的API参数说明,如下图所示:

blob.png

callLater示例代码:

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

        public class TimerDEMO
        {
                
                public function TimerDEMO()
                {
                    Laya.init(1136, 640, WebGL);
                    
                    Laya.stage.bgColor = "#ffffff";
                    
                    var s:int;
                    for (var i:int = 1; i < 5; i++)
                    {
                      s += i;
                      //尽管处于循环中,callLater中的回调在渲染时仅执行第一次,不会重复调用
                      Laya.timer.callLater(this, onCallLater, [s]);
                    }
                    //显示for循环计算的值
                    showText("循环计算的值:", s, 200, 100);
                }
                
                private function onCallLater(s:int):void
                {        
                      showText("callLater回调接收的值:", s, 200, 300);
                }
                
                private function showText(t:String,i:int,x:int,y:int):void
                {
                        var text:Text = new Text();
                        text.text = t + i; 
                        text.fontSize = 50;
                        text.pos(x,y);                                
                        Laya.stage.addChild(text);                        
                }                                
        }
}

运行效果如下图所示:

blob.png

        在本次示例,for循环中采用callLater延迟执行,从运行结果上看,回调函数中显示接收的值是第一次调用的值。而循环外获得了完整的计算结果。充分说明在callLater中的回调方法,尽管被循环调用了多次,但都会被放到延迟队列中,在渲染时执行最早的调用。