Czy FRP push-pull pomaga przy wdrażaniu gier?

Porównywałem pull-only FRP (ie netwire) z push-pull FRP (ie reactive-bannana) w implementacji gier. Czy są zalety jednego nad drugim? Things I ' ve notices are:

  • zdarzenia Push ułatwiają wyświetlanie zdarzeń dla kliknięć myszką / naciśnięć klawiszy z GLFW lub GLUT
  • Arowized FRP, którego używa netwire, ma znacznie mniej IO unoszących się wokół, co zawsze jest lepsze.
  • wygląda na to, że tylko pull-odpowiedzi na rzeczy takie jak ruch myszy może bo czas przecieka.
Co jeszcze przegapiłem?

Edit, żeby było mniej opiniotwórcze: głównym celem jest mieć coś, co jest jak najbardziej wyraziste/zwięzłe, bez wycieków czasu.

Update: duży problem, który znalazłem z Netwire jest to, że nie wydaje się być wygodny sposób, aby mieć więcej niż jeden framerate, jak opisano w artykule " Fix your Timestep."

Update 2: sposób, w jaki obejrzałem to, jest po to, aby moja gra drut symulacyjny zwraca Float -> IO (), który pobiera wartość alfa i wykonuje wszystkie wywołania GL ze wszystkim interpolowanym przez tę Alfę. Najlepiej byłoby, gdybym mógł przekazać tę "funkcję rysowania" do innego wątku za pomocą MVar i uruchomić ją w tym wątku. Haskell jest niesamowity.

Update 3: w ciągu sześciu miesięcy od zadania tego pytania, opracowałem prosty silnik renderujący oparty na Netwire, oraz koncepcję " programowania komponentów entity."W tym procesie mam właściwie nie znalazłem użycie FRP być strasznie pomocne. Wyrazistość Wire s okazała się w pewnych okolicznościach przeszkodą. Problem koncentruje się wokół "tożsamości" przedmiotów. Przy definiowaniu wartości typu Wire, nie ma ona tożsamości, tzn. może być wielokrotnie używana w całej sieci i za każdym razem reprezentować różne rzeczy fizyczne. Jest to ogromny ból, gdy chcesz zrobić coś takiego jak wykrywanie kolizji i nie masz możliwości przemierzania wykresu sceny, ponieważ nie może istnieć bez połączenia w jeden nieprzezroczysty przewód. Problem ten nie występuje w przykładach "zabawek" , ponieważ łatwo jest dokładnie określić które właściwości, które obiekty oddziałują z którymi innymi obiektami w jaki sposób. Uważam, że jest to problem z każdym typem FRP.

Byłoby super, gdyby jakiś czarodziej Haskell udowodnił, że się mylę, ale nie widzę na to sposobu. Również przepraszam, jeśli Wyjaśnienie nie jest świetne, ale to nie jest naprawdę tak łatwo to zrozumieć, nie próbując tego samemu.
Author: Dan, 2013-12-16

1 answers

Z tego co mogę przeczytać tutaj i tam, Netwire i reactive-banan mają różne cele i cele. Netwire specjalizuje się w modelowaniu sygnałów ramkowych, takich jak serwer gier, ponieważ to, co serwer gier zazwyczaj robi, to wysyłanie swojego stanu do Klienta w okresowych klatkach. Reactive-banan byłby lepszym wyborem do tworzenia GUI, ponieważ GUI jest modelem czysto sterowanym zdarzeniami i nie jest tolerancyjny na wyciek czasu.

Wydaje mi się, że możesz użyć obu, w zależności od tego, który aspekt chcesz wdrożyć.

 2
Author: Arthur Havlicek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:07