少し背景:
2D ブラウザ ベースのゲームを作成しています。レンダリング コードは、移動オブジェクトと風景オブジェクトを 2 つのグループに分割し、各グループ全体を 8192x8192 のキャンバスに描画しますが、直接表示されることはありません。これは、そのグループ内の何かが何らかの形で変更された場合にのみ行われます。すべてのフレームに対して、次の処理が行われます。
canvas.drawImage(
zoneBufferStatic,
Math.floor((w / 2 - playerX) * tileSize),
Math.floor((h / 2 - playerY) * tileSize)
);
canvas.drawImage(
zoneBufferDynamic,
Math.floor((w / 2 - playerX) * tileSize),
Math.floor((h / 2 - playerY) * tileSize)
);
(ここで、 はユーザーに表示されるcanvas
キャンバスの 2D コンテキスト、 はそれぞれ風景と移動オブジェクトのオフスクリーン キャンバス、zoneBufferStatic
はユーザーに表示されるキャンバスの幅と高さ (タイル単位) 、はプレイヤーの位置 (再びタイル単位)) ;はタイルの側面のピクセル数で、現在は 32)zoneBufferDynamic
w
h
playerX
playerY
tileSize
UI (チャット テキスト、ダイアログ) は、表示されているキャンバスに直接描画されます。
上記の 2 つの drawImage 呼び出しは、私のデスクトップ (16GB RAM、i7、GTX 780) ではまったく同じように機能しますが、私の Chromebook (Samsung ARM (コードネーム daisy、snow)、2GB RAM) では何もしません。UI は正常に表示されますが、風景やキャラクターはまったく表示されません。Chrome の開発者コンソールにエラーはありません。document.body.appendChild(zoneBufferStatic)
Chrome デベロッパー コンソールでバック バッファが描画されていることを確認しました。
これを行うためのより良い方法、または失敗したときに検出する (ハックではない) 方法はありますか?