今、私はすべてが描かれている1つの大きなキャンバスを持っています。キャンバスはJSファイルに直接作成されます。
var canvas = document.createElement ("canvas");
var ctx = canvas.getContext("2d");
canvas.width = document.width;
canvas.height = document.height;
document.body.appendChild(canvas);
ブラウザウィンドウに合わせてサイズを変更します。
他のすべての要素と一緒に1つのキャンバスにグラデーションの背景を描画しています。背景の色は、ゲームモードが変更されるたびにランダムに生成されます(たとえば、メインメニューがゲームに切り替えられたとき、次にレベル終了画面に切り替えられたときなど)。現在、私はこれらを次のようにキャンバスに描画しています。
var grad1 = ctx.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, 500);
grad1.addColorStop(0, bgGradStop1);
grad1.addColorStop(1, bgGradStop2);
ctx.fillStyle = grad1;
ctx.fillRect(0, 0, canvas.width, canvas.height);
背景に別のキャンバスを使用すると、パフォーマンスが向上することを何度も読みました。これを効果的にするために私がしなければならない特定のことはありますか、または単に別のキャンバスを作成し、同じ正確なコードを使用して背景を描画し、次のように他のキャンバスを使用するように変更するだけですか?
var grad1 = ctxBg.createRadialGradient(canvasBg.width / 2, canvasBg.height / 2, 0, canvasBg.width / 2, canvasBg.height / 2, 500);
grad1.addColorStop(0, bgGradStop1);
grad1.addColorStop(1, bgGradStop2);
ctxBg.fillStyle = grad1;
ctxBg.fillRect(0, 0, canvasBg.width, canvasBg.height);
または、パフォーマンス上の利点を得るには、2番目のキャンバスを使用するまったく異なる方法が必要ですか?
また、まったく同じことを別のキャンバスで行うだけの場合、たとえば、他のエンティティが移動しているときにHUDテキストを独自のキャンバスに移動することにもメリットはありますか?さまざまなタイプのエンティティを独自のキャンバスに分離することさえできますか?複数のキャンバスの利点は実際にどこまで広がりますか?