7

私は、AI ロジック、動きなどと描画を含むゲームに取り組んでいます。Web Workers を使用して移動と AI ロジックを計算することは理にかなっていますか? しかし、どうすればそれを行うことができますか? ワーカーは、衝突のための特定のオブジェクトの位置、弾丸の量など、メイン スレッドについて多くのことを知る必要があるためです。アクセスできません。postMessage() システムがあることは知っていますが、それはとても感じます...うーん、痛いですか?

たとえば、スプライト、位置、ヘルスなどを持つライフルマンを表すライフルマン オブジェクトがあります。彼にパトロールしてもらいたいと思います。では、ワーカーでパトロール コードを実行するにはどうすればよいでしょうか。そのオブジェクトへのほぼすべてのアクセスが必要になります。

4

1 に答える 1

3

ゲームにWebWorkersを使用することは理にかなっていると思いますが、そうです、Webworkersに渡すことができる有効なJSONに変換できるゲーム状態オブジェクトを保持する必要があることを意味します。明るい面としては、これらのWebワーカー内に多くの固有のデータを配置することもできます。

var gameState = {
   sprites: {
      {
         type: 'rifleman',  // damage, accuracy, speed etc set inside appropriate webworker.
         owner: 'playerA', 
         x: 100,
         y: 100,
         z: 0,
         level: 1, // used to fetch modifiers to dmg, acc, speed etc.

      },
      {
         // each sprite it's own state obj.
      }
   }
}

次に、パトロールと発生する可能性のあるイベント用にWebワーカーを設定します(Webワーカー内の他のWebワーカーに電話して、パトロールイベントを処理することもできます)

var patrolWorker = new WebWorker('patrolWorker');
patrolWorker.onmessage = function(e){
   render(e.data); // your render function, can ALSO be a webworker if you like ;)
}
patrolWorker.postMessage(gameState.sprites);

WebWorkersを使用することは、実際には非常にアーキテクチャ上の決定であり、WebWorkersを使用する場合は、多くのリファクタリングが必要になることを、これまでに明らかにする必要があります。リファクタリングがなければ、それがあなたにとってまったく役に立たないと思います。

于 2010-08-08T16:05:47.877 に答える