HTML5 게임 물리 시뮬레이션을위한 웹 워커?


12

질문 과 관련이 있습니다.

아이디어는 가능한 한 동일한 물리 행동을 보장하는 것입니다. 웹 워커에서 고정 시간 단계 물리를 실행할 수 있습니까? UI는 다른 / 가변 새로 고침 빈도로 자체 업데이트됩니다.

아무도 아직 시도하지 않았습니까?


웹 워커를 사용하여 얻는 것이 무엇이라고 생각하십니까? 지금까지 내 대답은 효과가 있지만 왜 귀찮게합니까?
aaaaaaaaaaaa

답변:


3

나는이 실험을 발견했다 . 웹 작업자에서 Box2d 물리를 실행합니다. Vincent Scheib의 의견에서 언급 된 문제를 해결하는 방법에 대해서는 자세히 확인하지 않았습니다.


좋은 실험이다. 나는 이런 유형의 프로젝트도 따라 갔다. 불행히도, 대부분은 여전히 ​​Java / C에 묶여 있습니다. OP가 브라우저에서 기본적으로 플러그인을 제거하는 방법을 찾고 있다고 생각합니다.
케빈 페노

2
구글 사람에 의해 같은 기사 : t.co/AuhPptB
sorenbs

2

그러나 이것은 일할 수있는 WebWorker후속이야 관찰자 패턴document작업자에서 /에 (노동자를 소유 HTML 페이지)에서만들을 수 있습니다 및 사후 메시지를. 그로부터 몇 가지 옵션이 있습니다. 모든 경우에 정보를 최적화하기 위해 사용자 에이전트의 최적 FPS를 결정하기 위해 어쨌든 찾아야한다고 생각합니다. 그러면 다음 중 하나를 수행 할 수 있습니다.

  • 작업자에게 해당 시간 간격으로 메시지를 게시하도록 지시
    • 단점 : document응답이 발생하면 응답 할 준비 가되어 있다고 가정 해야합니다.
  • 에게 document시간 간격으로 물리학을 요청하는 직원에게 메시지를 보내 x, 다음 작업자는 곧 그 후 응답 (희망)을 게시 할 것입니다.
    • 단점 : 모든 게시물과 응답이 비동기 적이므로 요청과 작업자의 응답 사이에 지연이있을 수 있습니다. 이 경우 예상치 못한 소리가 들리지 onmessage않도록 이벤트를 document무시해야합니다.

내가 놓친 다른 것들이나 커뮤니케이션을 처리하는 방법이 있다고 확신합니다. 주제에 대한 다른 답변을 기대하겠습니다!


1
a) 성능에 관한주의! requestAnimationFrame을 고려하여 탭을 백그라운드에 배치했을 때 (아마 너무 길면) CPU를 태우지 않도록 작업자에게 '생존 유지'신호를 보냅니다.
Vincent Scheib

b) IIRC 작업자의 모든 메시지는 메인 스레드에서 수신되며 대기열에있게됩니다. 5 개의 업데이트가 있지만 최신 업데이트 만 필요한 경우 기본 스레드에 어떤 영향을 미치는지 생각해보십시오. 당신은 또한 당신이 더오고 있다고 말할 수 없습니다.
Vincent Scheib

c) 모든 메시지가 데이터를 복사하고 있습니다. 스레드간에 더 많은 데이터를 보내야할수록 더 많은 데이터 복사 및 가비지 콜렉션 작업이 수행됩니다. 따라서 계산 / 메시지 데이터 비율이 높은 경우에만 승리가 존재합니다.
Vincent Scheib

@Vincent, B)에 관해서 document는 합리적인 fps를 찾아서 항상 준비 해야 하거나 근로자가 document요청할 때까지 아무것도하지 않는 옵션 2를 사용 한다고 말한 이유 입니다.
Kevin Peno

2

Physijs 는 웹 워커를 사용합니다. 그것은 ammojs 물리를 Three.js 객체와 함께 붙이고 필요에 따라 업데이트합니다. 그것은 고정 및 유동 시간 단계를 특징으로합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.