我正在製作遊戲,並且出現了一些使用drawImage將一個畫布繪製到另一個畫布上的性能問題。根據Chrome的Profiler,我花了60%的時間在這一個drawImage調用和10%的clearRect上面...HTML/Canvas - 使用另一個畫布繪製圖像性能
目前的源畫布大約是3000x3000(這是相當小的,我'd說),目標畫布是1024x768。
我認爲,不是繪製所有的瓷磚;牆壁等等每個循環(這給我15fps左右),它可能會更快地將它們全部繪製到屏幕外的畫布上,然後將其繪製到我的主畫布上,然後在頂部繪製實體等。這給了我〜30fps,但是......這是我用軟件渲染獲得的最好效果嗎?
我的渲染循環基本上是:
ctx.clearRect(0, 0, 1024, 768);
ctx.beginPath();
ctx.drawImage(map, cam.position.i, cam.position.j, 1024, 768, 0, 0, 1024, 768);
ctx.closePath();
ctx.save();
ctx.translate(-cam.position.i, -cam.position.j);
// draw entities, etc.
ctx.restore();
我真的不能相信的事,除了開始使用的WebGL(以利用其硬件加速)或等待供應商來實現硬件加速2d上下文。儘管如此,我寧願不做這些,所以任何輸入都將不勝感激。
我不知道beginPath方法和closePath適用的drawImage。 – kanaka 2010-10-19 16:32:26
啊,我一直在用lineTo/moveTo和drawImage的路徑。我剛剛刪除它們,幀速率大致相同,但無論如何感謝。 – Xavura 2010-10-19 16:43:37
3000x3000是龐大的,即使是1024x768在軟件渲染方面已經很慢了,或者它耗盡了所有可以獲得的CPU,根據我的經驗,在硬件加速到達所有終端之前,沒有多少可做。儘管如此,您可能會考慮使用基於HTML的方法來製作基於圖塊的遊戲。 – 2010-10-19 17:04:04