canvas性能优化,html5 canvas核心技术

  canvas性能优化,html5 canvas核心技术

  使用缓存技术实现预绘制,减少重复绘制Canvs内容

  很多时候我们在画布上绘图更新的时候,总是会保留一些不可更改的内容。对于这些内容

  缓存应该提前绘制,而不是每次都刷新。

  直接画代码如下:复制代码如下:

  context.font= 24px Arial

  context.fillStyle= blue

  context.fillText(请按Esc退出游戏,5,50);

  requestAnimationFrame(render);

  使用缓存预绘制技术;复制代码代码如下:

  函数呈现(上下文){

  context.drawImage(mText_canvas,0,0);

  requestAnimationFrame(render);

  }

  函数drawText(上下文){

  mText _ canvas=document . createelement( canvas );

  mText _ canvas.width=450

  mText _ canvas.height=54

  var m _ context=mText _ canvas . get context( 2d );

  m _ context.font= 24px Arial

  m _ context.fillStyle= blue

  m_context.fillText(请按Esc退出游戏,5,50);

  }

  使用画布缓存绘制技术时,必须记住缓存的画布对象的大小小于实际的画布大小。尽量把画直点的操作放在一起,尽量一次画好。坏代码如下:复制代码代码如下:

  for(var I=0;I points . length-1;i ) {

  var p1=点数[I];

  var p2=点数[I 1];

  context . begin path();

  context.moveTo(p1.x,P1 . y);

  context.lineTo(p2.x,p2 . y);

  context . stroke();

  }修改以后性能较高的代码如下:复制代码代码如下:

  context . begin path();

  for(var I=0;I points . length-1;i ) {

  var p1=点数[I];

  var p2=点数[I 1];

  context.moveTo(p1.x,P1 . y);

  context.lineTo(p2.x,p2 . y);

  }

  context . stroke();

  避免画布绘制状态不必要的频繁切换。经常切换画图风格的例子如下:复制代码代码如下:

  var GAP=10

  for(var I=0;i10i ) {

  context.fillStyle=(i % 2?蓝色:红色);

  context.fillRect(0,i * GAP,400,GAP);

  }

  避免频繁切换绘图状态。性能较好的绘图代码如下:复制代码代码如下:

  //偶数

  context.fillStyle= red

  for(var I=0;i5;i ) {

  context.fillRect(0,(i*2) * GAP,400,GAP);

  }

  //奇数

  context.fillStyle= blue

  for(var I=0;i5;i ) {

  context.fillRect(0,(i*2 1) * GAP,400,GAP);

  }

  画图时只画需要更新的区域,避免不必要的重复画图,随时产生额外费用。对于复杂场景渲染,采用分层渲染技术,分别分为前景渲染和背景渲染。它定义了画布层。

  HTML如下:复制代码代码如下:

  canvas id= BG width= 640 height= 480 style= position:absolute;z索引:0

  /画布

  canvas id= fg width= 640 height= 480 style= position:absolute;z索引:1

  SPAN style= FONT-SIZE:18px /canvas

  /SPAN

  如果没有必要,尽量避免画特效,比如阴影、模糊等。避免使用浮点数坐标

  画图形时,长度和坐标应该是整数,而不是浮点数。原因是Canvas支持半像素绘制,基于小数位的插值算法会实现绘制图像的抗锯齿效果。如果没有必要,请不要选择浮点数。清空Canvas上的绘制内容:

  context.clearRect(0,0,canvas.width,canvas.height)

  但Canvas中其实有一个类似hack的清空方法:

  canvas.width=画布. width;

  您也可以清除画布上的内容,但有些浏览器可能不支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: