它是否要求过多的画布来重绘游戏循环中的所有内容?

ale*_*lex 5 javascript html5 canvas

我在Canvas开始了一场Breakout游戏.

目前,我只编写了块和播放器的显示.

当游戏需要自我更新(每10分钟左右)时,需要调用draw()当前根据玩家,块和球的当前状态重新绘制整个画布.

它的性能开始成为一个问题.

每帧重绘整个画布永远不是一个好主意吗?我应该改变我的代码只绘制正在改变的部分吗?

Sim*_*ris 8

首先:是的,改变你的代码只绘制正在改变的部分可能有用,但是你应该总是用自己的代码测试特定的改进,因为任何一个优化的性能因app而异(有时很大).

但它不仅可以导致缓慢的绘图.例如,确保您没有重新计算/重建绘制循环中永不改变的任何内容.

此外,如果您有很多对象,fillStyle除非必须,否则不要设置,这意味着通过将填充设置为一种颜色,绘制该颜色的所有对象,然后设置第二种填充颜色,可以进行优化等

最后,我建议你编写你的整个游戏(或大部分游戏)然后回去做优化.

Canvas需要进行大量优化.我最近开始制作一本关于游戏相关性能增强的指南,希望它能在今年年底完成.


Phr*_*ogz 5

你必须尝试确定,但我不同意这里的两个答案。在我的简单测试中,尝试清除并重绘画布的特定区域会产生稍差的性能,而不是更好。

您可以在这里看到我的测试:http://phrogz.net/tmp/image_move_sprites_canvas.html

不过,这取决于您的需求。如果您有数百个不需要更新的项目,并且画布中只有一小部分会更改每个帧,那么也许只清除并重新绘制该部分会很好。