2010-08-08 48 views
6

我正在研究一個有AI邏輯,運動等等和繪畫的遊戲。使用Web Workers計算移動和AI邏輯有意義嗎?但我該怎麼做 - 因爲工作人員需要非常瞭解主線程,比如某些物體碰撞的位置,子彈的數量等。感覺這是不可能的,因爲工作人員與主線程完全分離,沒有訪問,所以永遠。我知道那裏有一個postMessage()系統,但是感覺這麼......呃,痛苦?使用Web Workers進行遊戲有意義嗎?

例如,我有一個步槍手的對象,代表着一個精靈,位置,健康等等的步槍手。我希望他巡邏。那麼,我如何在工作人員上巡邏呢?它幾乎需要訪問該對象的整個過程。

+1

我不知道的情況下:如果問題是非常具體的遊戲,它可能是一個好主意,請在http://gamedev.stackexchange.com – 2010-08-08 16:03:25

回答

3

我認爲它是有意義的使用WebWorkers了比賽,但,是的,這將意味着你將不得不繼續它可以轉換成可以傳遞給webworkers有效的JSON遊戲狀態對象。在brightside上,你也可以在這些webworkers中放置大量的內在數據。

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. 
     } 
    } 
} 

然後設置了巡邏和可能的事件webworker(你可以調用一個webworker內的其他webworkers以及和過程巡邏事件)

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實際上是一個非常重要的架構決策,如果你想使用它,它會涉及到很多重構。沒有重構,我懷疑它對你有用。

+0

對於遊戲,如果有大量的對象,遊戲狀態以數組數組的形式存儲,因爲您避免了數據 - > JSON - >數據轉換鏈。 – 2016-07-21 12:27:00

相關問題