11

少し背景:

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)zoneBufferDynamicwhplayerXplayerYtileSize

UI (チャット テキスト、ダイアログ) は、表示されているキャンバスに直接描画されます。


上記の 2 つの drawImage 呼び出しは、私のデスクトップ (16GB RAM、i7、GTX 780) ではまったく同じように機能しますが、私の Chromebook (Samsung ARM (コードネーム daisy、snow)、2GB RAM) では何もしません。UI は正常に表示されますが、風景やキャラクターはまったく表示されません。Chrome の開発者コンソールにエラーはありません。document.body.appendChild(zoneBufferStatic)Chrome デベロッパー コンソールでバック バッファが描画されていることを確認しました。

これを行うためのより良い方法、または失敗したときに検出する (ハックではない) 方法はありますか?

4

1 に答える 1

0

Chromebook のメモリが不足していて、それが問題を引き起こしている可能性はありますか? 各ピクセルが 4 バイト (RGBA) で、メモリに 6,710 万ピクセル (8192x8192) がある場合、ほぼ 250Mb の RAM になります。他の多くのプログラムを実行したり、タブを開いたり、オペレーティング システムで RAM を使用したりしている場合は、簡単に RAM が不足する可能性があります。最近の 2Gb はあまりメモリではありません。

于 2020-06-12T05:01:55.063 に答える