1

私は現在、スペース インベーダーに似た JavaScript シューティング ゲームを試しています。現在コード化されている方法は、移動する投射物または船のいずれかです。オリジナルをプレイしたことのある人なら誰でも、これが良くないことを知っているでしょう。Java クラスでマルチスレッド化を検討したことを覚えていますが、これが正しい方法なのか、それとも別の方法があるのか​​疑問に思っていました。例えば:

Thread Move start;
Thread Move run;
Thread Shoot start;
Thread Move run;
Thread Shoot run;
Thread Shoot end;
Thread Move run;
Thread Move end;
4

2 に答える 2

2

Javascript でWebWorkerを使用できますが、Java のように、真のマルチスレッド環境と同じように動作することはありません。申し訳ありませんが、ゲームの開発には別のアプローチを採用する必要があります。ラウンド ロビン手法のようなものを使用して、ゲームのロジックをすべて同じスレッドの下で更新する必要があります。:( javascript でスレッド化のために追加されたサポートはまだ非常に難解であり、私の意見ではほとんどギミックです。スレッドに渡されたすべてのデータを必ずしもコピーするとは限らないため、Chrome だけがそうです。なぜスレッドがjavascript では身動きがとれません:

  1. dom への真のアクセスなし
  2. すべてではないにしてもほとんどの (エンジンによっては) データを他のスレッドにコピーする必要があります。
  3. WebWorkers のエラーは、まだ完全に明らかであるとは限りません (ランダムでわかりにくいエラーが発生する場合があります)。

そのため、WebWorkers には大きな可能性がありますが、私にとっては、現時点で WebWorker に課せられた制限によって、それらの使用が大幅に制限されています。あなたのゲームでそれらの巧妙な使い方を見つけることができるかもしれません。

于 2013-03-21T21:42:19.127 に答える
2

従来、JavaScript はシングルスレッドであったため、Java で慣れているようなスレッドを使用することは現実的ではありませんでした。JavaScript への比較的最近の追加は、真のマルチスレッドを提供するWeb ワーカー (仕様はこちら) です。ただし、ブラウザー間のサポートは多少異なり、ワーカー スレッドで実行できることは制限され、スレッド間の通信は面倒です。

Clumpy.jsなどを使用して、非同期実行をシミュレートすることもできます。

何をするにしても、メイン スレッドをブロックしないことが重要です。ブラウザ ウィンドウ全体が応答しなくなります。

于 2013-03-21T21:44:09.980 に答える