我希望将游戏从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()`
并根据事件旋转图像并使用旋转图像并使用当前比例调整图像大小(仅适用于显示范围内的对象)。
感谢。
答案 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,等)。