html5 canvas中设置requestAnimationFrame帧速的方法
时间:2016年04月18日 人气:...

  HTML5 canvas中用于实现动画效果,往往需要用到js中SetInterval与setTimeout,这种定时脚本往往会占用额外的CPU资源。HTML5给我们提供了requestAnimationFrame的方法用于代替它们,但这个requestAnimationFrame却没有提供控制帧速的方法,它的速度可以超过60FPS,但也可能会因为电脑配置或浏览器不同的原因而不同。对于网络游戏这种对画面同步要求比较高的时候,可能是往往不够理想的。而我们的设计HTML5游戏时也可能不需要60FPS处理速度,下面的脚本使帧速基本控制在30FPS左右,经测试可以基本实现控制帧速,各浏览器的帧速基本相同。

var drawcount={time:0,fps:31,nums:1};
function startDraw(){
var t=new Date();
if(drawcount.time!=0){
	var fps=Math.floor(1000/(new Date().getTime()-drawcount.time.getTime()));
	var fps2=drawcount.fps+fps;
	var fps3=fps2/drawcount.nums;
	if(fps3>31){
		window.requestNextAnimationFrame(startDraw);
		return;
		};
	//输出fps3可以查看当前帧速
	drawcount.fps=fps2;
	drawcount.nums++;
	if(drawcount.nums>5000){
		drawcount.nums=0;
		drawcount.fps=0;
		};
	};
drawcount.time=t;

/********************/
/*这里添加处理画布的事件*/
/********************/

window.requestNextAnimationFrame(startDraw);
}

注:上面用到的 window.requestNextAnimationFrame,相当于window.setTimeout,详见附件。

requestnextanimationframe.zip

热门评论