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ł?


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.


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!


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.