2010-08-08 2 views
6

저는 AI 로직, 무브먼트, 기타 등이있는 게임을 작업 중입니다. 웹 노동자를 사용하여 이사 및 AI 로직을 계산하는 것이 합리적입니까? 하지만 어떻게해야합니까? 작업자가 충돌, 총알 등의 특정 물체의 위치와 같이 주 스레드에 대해 많이 알아야하기 때문에 작업자가 주 스레드와 완전히 별개이므로 불가능한 것처럼 느껴집니다. 그렇게까지 액세스 할 수 없습니다. 나는 postMessage() 시스템이 있다는 것을 알고 있지만, 그렇게 느껴진다. 음, 고통 스럽다.웹 근로자를 게임에 사용하는 것이 합리적입니까?

예를 들어, 저는 스프라이트, 위치, 건강 등을 가진 라이플맨을 나타내는 라이플맨 오브젝트를 가지고 있습니다. 나는 그를 순찰하기를 원합니다. 그래서, 나는 그 순찰 코드를 노동자에게 어떻게해야합니까? 그 객체에 대한 전체 액세스가 필요합니다.

+1

문맥에 대해 잘 모르겠습니다. 질문이 게임에 매우 특정한 경우 http://gamedev.stackexchange.com –

답변

3

WebWorkers를 게임에 사용하는 것이 이치에 맞다고 생각하지만, 그렇다면 웹 작업자에게 전달할 수있는 유효한 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. 
     } 
    } 
} 

는 당신은 순찰 가능한 이벤트에 대한 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 -> 데이터 변환 체인을 피하기 때문에 선호하는 배열로 저장됩니다. –

관련 문제