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.
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.
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ć.
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