2013-06-19 16 views
6

Wygląda na to, że wszyscy grają komputerowo z frameworkiem reaktywnego banana, więc musiałem spróbować. Jednak utknąłem w początkowych krokach, próbując opisać dane gry jako typy reaktywne-bananowe Behavior.Jak sprawić, by Zachowania zawierały inne zachowania w reaktywnym bananie?

Zasadniczo próbuję mieć (zmieniającą) listę postaci w grze (takich jak Frodo lub Sam). Znaki gry mogą być aktualizowane na każdym teście gry (wzorowanym na wydarzeniu typu "tick"). Chodzi o to, że za każdym razem, gdy zmienia się postać gry, uruchamiany jest pojedynczy Event (Character), a aktualizacja postaci jest ostatecznie wysyłana przez sieć. Zaletą tego w porównaniu do przykładu Asteroids.hs powinno być to, że cały stan gry (cała lista postaci w grze) nie musi być przesłany przez sieć, ponieważ będzie kilka zdarzeń mających jedną postać gry zamiast pojedyncze wydarzenie z listą postaci do gry.

Dla jednej postaci gry działa to dobrze! Stworzyłem Behavior (Character) z mapaccum, aby sygnał aktualizacji znaku został wysłany po aktualizacji postaci. Problem, którego nie mogę rozwiązać, polega na tym, jak zrobić to z listą postaci z gry w wersji Behavior.

Próbuję modelować listę postaci w grze jako Behavior, ponieważ postacie mogą przychodzić i odchodzić podczas gry. Czy muszę tu używać przełączania zdarzeń dynamicznych? Lub jeśli nie używam Behavior z poszczególnymi postaciami gry (i używam tylko Behavior z listą znaków gry), czy istnieje sposób warunkowego wyzwalania aktualizacji podczas przechodzenia przez listę postaci? Czy nie rozumiem tutaj czegoś?

Odpowiedz

5

Aby zarządzać dynamiczną kolekcją zachowań, należy użyć dynamicznego przełączania zdarzeń. Zobacz przykład BarTab.hs dla demonstracji.

Jednak dynamiczne przełączanie zdarzeń może być nieco nieporęczne i często można tego uniknąć. Dwie typowe sytuacje to:

  1. Zbiór zachowań znany jest statycznie. Model TwoCounters.hs pokazuje, że można po prostu użyć aplikatorów kombinatorów funcji do obliczenia wartości w zależności od dowolnego zachowania.
  2. Kolekcja dynamiczna może być modelowana jako zachowanie kolekcji (Behavior [a]) w przeciwieństwie do kolekcji zachowań ([Behavior a]). Przykład Asteroids.hs pokazuje, jak tego użyć. Jest to kompromis stylistyczny: poszczególne wpisy z kolekcji nie mogą być już formułowane z FRP, ale kolekcja staje się łatwiejsza w zarządzaniu.
+1

W porządku, pomyślałem, że tak może być. Przypuszczam, że wypróbuję sposób "Zachowania kolekcji", o którym wspomniałeś i odfiltrujesz niezmienione postacie później. – ipuustin

+0

W szczególności, myślę, że użyję funkcji 'rozlewania' do podzielenia zdarzenia, że ​​lista znaków jest aktualizowana do kilku zdarzeń w celu aktualizacji pojedynczego znaku. – ipuustin

Powiązane problemy