HTML Canvas 被广泛用于游戏及复杂的图像可视化中。然而,随着网站和应用将 canvas 绘制效果推至极限,性能开始成为问题。

下面是一些改善性能的建议:


在离屏 canvas 上预渲染相似的图形或重复的对象

当我们发现绘图在每一帧都里有好多复杂的画图运算时,请考虑创建一个离屏canvas,将图像在这个画布上画一次(或者每当图像改变的时候画一次),然后在每帧上画出视线以外的这个画布。

myEntity.offscreenCanvas = document.createElement("canvas");
myEntity.offscreenCanvas.width = myEntity.width;
myEntity.offscreenCanvas.height = myEntity.height;
myEntity.offscreenContext = myEntity.offscreenCanvas.getContext("2d");

myEntity.render(myEntity.offscreenContext);

在 2D 环境下,常见的碰撞检测方法如下:

外接图形判别法

  • 轴对称包围盒(Axis-Aligned Bounding Box),即无旋转矩形。
  • 圆形碰撞
  • 圆形与矩形(无旋转)
  • 圆形与旋转矩形(以矩形中心点为旋转轴)

光线投射法

分离轴定理

其他

  • 地图格子划分
  • 像素检测

下文将由易到难的顺序介绍上述各种碰撞检测方法:外接图形判别法 > 其他 > 光线投射法 > 分离轴定理。

学习了圆周运动的计算之后,我忽然灵光一闪...

我有一个爱好,那就是摄影!我何不用这个方式实现一个星轨效果!!!

你的浏览器不支持canvas,请升级你的浏览器