2017-05-16 137 views
0

我正在製作MMO遊戲HTML5畫布。 它是等距它有瓷磚和牆壁html5畫布緩存瓷磚

所以我需要優化遊戲慢速電腦/移動設備
對於我想緩存我的瓷磚和牆壁:

一旦他們被吸引,他們都是靜態的/沒有設置動畫

所以我不需要每次重繪他們。


我也不想使用兩個(或更多)<canvas>對象,所以我想用我使用與​​我的遊戲道具/實體得出一致<canvas>元素。

我alerdy試圖畫出瓦片和牆壁屏幕外畫布相同的寬度/高度可見的帆布,然後每次繪製可見的畫布上,

但可見帆布用途頁面所以這是很相同的CPU使用率通過或者不通過高分辨率(像我目前的屏幕:1920×1080)高速緩存的分辨率

我應該怎樣做正確,所以我可以降低CPU使用率和使用的內存呢?沒有使用兩個畫布是不可能的?

+0

由於深度遮擋的問題,2D畫布不能爲基於等角拼圖的遊戲提供很好的解決方案。你不得不在每一幀重新渲染瓦片和遊戲精靈。對於等距遊戲,您需要使用webGL進行渲染,然後您可以使用z-buffer進行遮擋 – Blindman67

+0

@ Blindman67能否請您爲我提供帶動態圖像的WebGL演示,而不必重新繪製所有畫布,如果您不介意所以我可以看到這在行動? – JeePing

回答

0

在您第一次繪製地圖並調用圖像後,您可以嘗試將靜態元素保存爲圖像。如果您在繪製地圖時涉及很多元素,則會更快。

如果在遊戲過程中沒有透支這些靜態元素,他們再也不會被繪製了。記住這一點,

編輯:另外,您可以繪製更小的物體和縮放它們(refrence

var c=document.getElementById("myCanvas"); 
var ctx=c.getContext("2d"); 
ctx.strokeRect(5,5,25,15); 
ctx.scale(2,2); 
ctx.strokeRect(5,5,25,15); 

第二個矩形的兩倍,高和寬。

+0

Alerdy做到了這一點,但不是使用'new Image()'對象,而是使用了這樣的屏幕畫布:'ctx.drawImage(canvas,0,0)' 但是仍然存在畫布大小的問題 – JeePing

+0

@JeePing試試在畫布上繪製的比例方法。如果任何圖像繪製模糊,請嘗試添加'ctx.imageSmoothingEnabled = false;' – xEterno