Webワーカーをゲームに使用することは理にかなっていますか?
-
26-09-2019 - |
質問
私はAIロジック、動きなどを備えたゲームに取り組んでいます。 Webワーカーを使用して移動およびAIロジックを計算することは理にかなっていますか?しかし、どうすればよいですか?労働者は、衝突、弾丸の量などの特定のオブジェクトの位置のようなメインスレッドについて多くを知る必要があるためです。労働者はメインスレッドから完全に分離しているため、不可能に感じますこれまでにアクセスできません。私はポストメサージ()システムがあることを知っていますが、それはそう感じています...うーん、痛みを伴いますか?
たとえば、私はスプライト、ポジション、健康などのライフルマンを表すライフルマンオブジェクトを持っています。私は彼にパトロールしてほしい。それでは、どのようにして労働者にパトロールコードを行うのですか?そのオブジェクトへのアクセス全体がほとんど必要になります。
解決
ゲームにウェブワーカーを使用することは理にかなっていると思いますが、ええ、それはあなたがウェブワーカーに渡すことができる有効なJSONに変換できるゲーム状態オブジェクトを保持する必要があることを意味します。明るい側では、それらのウェブワーカーにも多くの本質的なデータを入れることができます。
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.
}
}
}
次に、パトロールや可能なイベントのためにウェブワーカーを設定します(ウェブワーカー内の他のウェブワーカーに電話して、パトロールイベントを処理できます)
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);
ウェブワーカーを使用することは、実際には非常に多くの建築上の決定であり、それらを使用したい場合、多くのリファクタリングが含まれることが明らかになる必要があります。リファクタリングがなければ、それがあなたにとって有用であるとは思わない。
所属していません StackOverflow