Pracownicy WWW do symulacji fizyki gier HTML5?

12

Trochę związane z tym pytaniem .

Chodzi o to, aby w jak największym stopniu zagwarantować to samo zachowanie fizyki. Czy byłoby możliwe uruchomienie fizyki kroków w ustalonym czasie na pracowniku sieci? Interfejs użytkownika zaktualizuje się z inną / zmienną częstotliwością odświeżania.

Czy ktoś już tak próbował?

Petteri Hietavirta
źródło
Co możesz zyskać, korzystając z pracownika sieci? Jak na razie moja odpowiedź brzmiałaby: to zadziała, ale po co zawracać sobie głowę?
aaaaaaaaaaaa

Odpowiedzi:

3

Znalazłem ten eksperyment . Prowadzi fizykę Box2d na pracowniku sieci. Nie sprawdziłem jeszcze szczegółowo, jak radzi sobie z problemami wymienionymi w komentarzach Vincenta Scheiba.

Petteri Hietavirta
źródło
Dobry eksperyment Śledziłem również tego rodzaju projekty. Niestety większość z nich jest nadal związana z Java / C. Uważam, że OP szuka sposobu, aby to zrobić natywnie w przeglądarce (bez wtyczek).
Kevin Peno
2
Artykuł o tym samym autorstwa google faceta: t.co/AuhPptB
sorenbs
2

Może to działać, jednak WebWorkerzgodnie z wzorcem obserwatora , documentstrona html będąca właścicielem pracownika może tylko słuchać i wysyłać wiadomości do / z pracownika. Wydaje mi się, że z tego jest kilka opcji. We wszystkich przypadkach myślę, że będziesz musiał jakoś znaleźć, aby określić optymalną liczbę klatek na sekundę w kliencie użytkownika, aby zoptymalizować informacje. Następnie możesz:

  • Powiedz pracownikom, aby publikowali wiadomości w tych odstępach czasu
    • Minusy (s?): Musisz założyć, że documentbędzie gotowy na odpowiedź, kiedy to nastąpi.
  • Powiedz, documentaby wysłał pracownikowi wiadomość z prośbą o fizykę w określonym przedziale czasowym x, a następnie pracownik opublikuje odpowiedź (miejmy nadzieję) wkrótce potem.
    • Minusy (s?): Ponieważ wszystkie posty i odpowiedzi są asynchroniczne, mogą wystąpić opóźnienia między żądaniem a odpowiedzią pracownika. W takim przypadku musisz również anulować onmessagezdarzenie, aby uniemożliwić documentsłuchanie, gdy się nie spodziewa.

Jestem pewien, że są też inne rzeczy, za którymi tęskniłem, a także sposoby radzenia sobie z komunikacją. Z niecierpliwością czekam na inne odpowiedzi na ten temat!

Kevin Peno
źródło
1
a) Uwaga dotycząca wydajności! Zastanów się nad requestAnimationFrame i zasygnalizuj od swojego pracownika „przy życiu”, abyś nie spalił procesora, jeśli karta jest umieszczona w tle (być może zbyt długo)
Vincent Scheib
b) IIRC Wszystkie wiadomości od pracownika zostaną odebrane w głównym wątku, ustawią się w kolejce. Zastanów się, jaki wpływ będzie to miało na twój główny wątek, jeśli masz 5 aktualizacji, ale potrzebujesz tylko najnowszych. Nie możesz też powiedzieć, że masz więcej.
Vincent Scheib,
c) Wszystkie wiadomości wykonują kopie danych. Im więcej danych musisz wysłać między wątkami, tym więcej pracy kopiowania danych i wyrzucania elementów bezużytecznych. Tak więc wygrana będzie istniała tylko wtedy, gdy istnieje wysoki stosunek obliczeń / danych.
Vincent Scheib
@Vincent, odnośnie B) dlatego powiedziałem, że albo będziesz musiał być documentzawsze gotowy, znajdując rozsądny fps, albo przejdź do opcji 2, w której pracownik nic nie robi, dopóki documento to nie poprosi.
Kevin Peno,
2

Physijs korzysta z pracownika sieci. Skleja fizykę ammojsa z obiektami Three.js i aktualizuje je w razie potrzeby. Uważam, że zawiera zarówno stałe, jak i płynne stopnie czasu

ebaum
źródło