ActionScript
TypeScript
JavaScript

定时执行

发布时间:2017-03-08

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

blob.png


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

(function()
{
	var Sprite = Laya.Sprite;
	var Text  	= Laya.Text;
	var WebGL   = Laya.WebGL;
	var flag;
	(function()
	{
		 Laya.init(1136, 640, WebGL);
			
		Laya.stage.bgColor = "#ffffff";

		createRect();
		for (var i = 1; i < 5; i++)
		{
				//延迟1秒后创建一个矩形,且循环内只会执行一次
				Laya.timer.once(1000, this, createRect);
		}
		
	})();

	function createRect()
	{
		var c = new Sprite(); 
		var color = (flag = !flag)?"#A52A2A":"#FFA500"
		c.graphics.clear();
		c.graphics.drawRect(50, 50, 300, 100, color);
		Laya.stage.addChild(c);
	}
})();


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

(function()
{
	var Sprite = Laya.Sprite;
	var Text  	= Laya.Text;
	var WebGL   = Laya.WebGL;
	var flag;
	(function()
	{
		 Laya.init(1136, 640, WebGL);
			
		Laya.stage.bgColor = "#ffffff";

		createRect();
		for (var i = 1; i < 5; i++)
		{
				//延迟60帧后绘制一个矩形,且循环内只会执行一次
				Laya.timer.frameOnce(60, this, createRect);
		}
		
	})();

	function createRect()
	{
		var c = new Sprite(); 
		var color = (flag = !flag)?"#A52A2A":"#FFA500"
		c.graphics.clear();
		c.graphics.drawRect(50, 50, 300, 100, color);
		Laya.stage.addChild(c);
	}
})();


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

blob.png

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


blob.png

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



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

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