Prawdopodobnie w każdej grze deweloper musi jakoś poradzić sobie z wprowadzaniem danych, może to być proste zdarzenia z klawiatury i myszy, zdarzenia dotykowe lub coś takiego jak wprowadzanie danych z akcelerometru. Ten wkład bezpośrednio pośrednio wpływa na obiekty w grze. Czasami to samo wejście może wpływać na różne obiekty. Teraz zastanawiałem się, jak to wymodelować. Moim zdaniem istnieją dwa różne podejścia.
Pozwól, aby sam obiekt gry sobie z tym poradził, zasubskrybuj zdarzenia i wywołaj własne metody. Ma to tę zaletę, że same obiekty gry decydują, które dane wejściowe powodują, które działanie. Wadą wydaje się być to, że kod wejściowy zostaje zniekształcony przez „podstawowy” kod obiektu gry. Również obiekty gry nie są świadome stanu reszty gry i czasami mogą nie działać na podstawie zdarzeń wejściowych. To nie wydaje się właściwe.
Poproś ogólnego kontrolera wejściowego, aby zajął się wszystkimi danymi wejściowymi i podejmował decyzje o tym, kto może obsłużyć dane zdarzenie. Wydaje się, że lepiej oddziela to obawy, ale ściśle łączy klasę kontrolera wejściowego z obiektami gry. W jakiś sposób musi wiedzieć, kto chce otrzymać dane wydarzenie i w jakim stanie. To też nie wydaje się właściwe.
Jakich strategii używasz do tego?
źródło
Sugerowałbym, aby twoja gra ( Model ) zdefiniowała listę możliwych zdarzeń wejściowych (zaimplementowanych jako wyliczenia lub obiekty ze wspólnym interfejsem podstawowym). Rzeczy takie jak
MovingRightStarted
,MovingRightStopped
,FiredWeapon1
,Escape
, itd ...Gra definiuje strukturę danych (na przykład a
queue
), którą Twój kod wejściowy ( kontroler ) może wypełnić zdarzeniami wejściowymi.Następnie gra może sondować strukturę danych, aby uzyskać zdarzenia wejściowe.
W ten sposób możesz podłączyć różnego rodzaju kontrolery, aby zasilić model:
Wystarczy, że wypchną zdarzenia wejściowe do modelu.
źródło
queue
typ danych do przechowywania tego. Czy możesz wyjaśnić dlaczego?