将渐变缓存到离屏画布,然后使用 drawImage() 在画布上进行绘制:
- 创建雾大小的离屏画布
- 绘制渐变
- 当需要雾时,使用屏幕外画布作为图像。
这样就消除了创建和计算梯度的处理。绘制图像基本上就是复制操作(稍微多了一点,但性能很好)。
function createFog(player) {
// Create off-screen canvas and gradient
var fogCanvas = document.createElement('canvas'),
ctx = fogCanvas.getContext('2d'),
grd = fogc.createRadialGradient(player.getPosX(),
player.getPosY(),
0,player.getPosX(),
player.getPosY(),100);
fogCanvas.width = 700;
fogCanvas.height = 700;
grd.addColorStop(0,"rgba(50,50,50,0)");
grd.addColorStop(1,"black");
// Fill with gradient
ctx.fillStyle = grd;
ctx.fillRect(0,0,700,600);
return fogCanvas;
}
现在您可以简单地在从上述函数返回的画布上绘制,而不是每次都创建渐变:
var fog = createFog(player);
ctx.drawImage(fog, x, y);