创建两个相互堆叠的画布:
第一个包含静态内容,另一个仅包含动态内容。
这样你只需要关心清除草被绘制的区域(这也快得多,因为不需要一直重绘静态)。
将两个画布放在一个位置设置为相对的div中,然后使用位置设置为绝对放置画布。
现在您可以创建一个函数来绘制静态内容(如果浏览器窗口被调整大小等,您将需要重新绘制它)。
记录绘制草的区域,并在下一帧中仅清除该区域(对于每个草)。
如果最后一个太复杂,只需在“动态”画布上使用简单的清除即可:
ctxDyn.clear(0, 0, canvasDyn.width, canvasDyn.height);
这也将保留此画布的透明度,如果您愿意,也可以称为“图层”。
使用requestAnimationFrame 来做实际的动画。
var isPlaying = true;
function animate() {
ctxDyn.clear(0, 0, canvasDyn.width, canvasDyn.height);
drawGrass(); //function to draw the actual grass
if (isPlaying) requestAnimationFrame(animate);
}
animate(); // start
isPlaying 是一个标志,您可以使用屏幕上的按钮或类似的东西进行切换,以便能够停止动画。请参阅requestAnimationFrame 的链接,了解如何制作这个跨浏览器,因为这仍然是一个“年轻”的实现。
dynCtx和dynCanvas当然可以随便叫什么。