6

サードパーティのプラグインを使用せずに、純粋な JavaScript と html5 でゲームを開発することを考えています。私が直面している問題は、レンダリング ジョブ、ゲーム ロジック、アセットの読み込みなど、ゲームのさまざまな「モジュール」を個別のスレッドに分離する方法が見つからないことです。

Web Workers はコードを異なるスレッドに分割できるように見えますが、問題はそれらの間で渡せる情報が限られていることです。たとえば、レンダリング ジョブの場合、ワーカー スレッドはメモリを共有できないため、ゲームの更新ごとにすべてのエンティティ、メッシュ、テクスチャなどを含む「世界」全体を渡す必要があります。初期化(メッシュ、テクスチャ)でのみ静的オブジェクトを送信し、更新時にオブジェクトの状態のみを送信する(ワールドトランスフォーム)など、最適化できますが、それでもそうではありません。

それらの間で大きなデータを送信したり、いくつかのオブジェクトを共有したりする方法はありますか? または、真のマルチスレッドを実現するためのまったく別の方法はありますか? プラグイン/ギアを使用してこれを達成する簡単な方法があることは知っていますが、オープン Web で利用可能な方法のみを使用する必要があります。

4

5 に答える 5

4

あなたはおそらく Web Workers を調べたいと思うでしょう。私はそれらの経験はありませんが、聞いたことはあります。あなたを正しい方向に導くかもしれません。

http://ejohn.org/blog/web-workers/

于 2011-06-14T20:02:58.007 に答える
4

JavaScript の Web Worker は、ある意味でより優れた並行プログラミング モデルです。たとえば、イベント駆動型で、共有オブジェクトはありません。これは、グリッド ロックに入ることができず (ロックがまったくないため)、オブジェクトが 2 つのスレッドによって同時に変更されても無効な状態にならないことを意味します。

問題は、このモデルの上に従来のゲーム システムを簡単にスタックできないことです。そのため、このプログラミング モデルを採用するには、ゲーム システムを新しい方法で設計する必要があり、コストがかかる可能性があると思います。

于 2011-06-15T03:04:17.040 に答える
0

web-workersは、js のマルチスレッド化に最も近いものです。
この時点で。
完全停止。

于 2011-06-14T20:05:32.180 に答える
0

ゲームの側面を構成するための機能的なアプローチをお勧めします。たとえばhttp://www.flapjax-lang.orgを参照してください。

于 2011-07-27T17:01:07.263 に答える