如何提高画布性能

时间:2018-06-05 22:56:28

标签: javascript performance canvas memory

我希望将游戏从1艘船扩展到10 000艘船只的船队,如果它适用于数百万艘船舶。

画布绘制所有你告诉他绘制的内容,即使它是负坐标。所以我只绘制了显示范围内的游戏对象。

我到处使用ES5,它更快,更受支持。 缩放和旋转计算由Camera,Mouse和KeyBoard事件进行(不能仅适用于火箭和激光束)。

但主要的时间是用于显示范围内每个游戏对象的代码部分(可能有数千个游戏对象或很少):

tensor([[[ 1,  3,  5],
         [ 2,  4,  6]]])

如何让它更快?

提高性能的最佳方法是什么? 现在我考虑删除`ctx.save() ctx.translate(drawX, drawY); ctx.rotate(alfa); ctx.drawImage(images.image, -width/2, -height/2, width, height); ctx.restore()` 并根据事件旋转图像并使用旋转图像并使用当前比例调整图像大小(仅适用于显示范围内的对象)。

感谢。

1 个答案:

答案 0 :(得分:2)

如果你试图仅在2D画布中渲染数千个,更不用说一百万个独立的东西,你可能会遇到硬限制。你可能会更好地使用WebGL,也许使用像PixiJS这样的库。

但是,如果您仍计划使用画布,user Blindman67 gave some good tips regarding performance in a different question。简而言之,对于您的情况,请避免使用save / restore并使用setTransform代替,并绘制尺寸为2(2,4,8,16,32,等)。