Podziel to na kilka warstw.
Na najniższej warstwie masz nieprzetworzone zdarzenia wejściowe z systemu operacyjnego. Wprowadzanie za pomocą klawiatury SDL, wprowadzanie za pomocą myszy, wprowadzanie za pomocą joysticka itp. Możesz mieć kilka platform (SDL jest najmniej powszechnym mianownikiem pozbawionym kilku formularzy wprowadzania, na przykład, o które możesz później dbać).
Możesz je streścić za pomocą niestandardowego typu zdarzenia na bardzo niskim poziomie, takiego jak „przycisk klawiatury w dół” lub podobny. Gdy warstwa platformy (pętla gry SDL) otrzymuje dane wejściowe, powinna utworzyć zdarzenia niskiego poziomu, a następnie przesłać je do menedżera danych wejściowych. Może to robić za pomocą prostych wywołań metod, funkcji zwrotnych, skomplikowanego systemu zdarzeń, co tylko zechcesz.
System wprowadzania ma teraz za zadanie przekształcanie danych wejściowych niskiego poziomu na zdarzenia logiczne wysokiego poziomu. Logika gry wcale nie dba o to, by nacisnąć SPACJĘ. Dba o to, aby JUMP został wciśnięty. Zadaniem menedżera wprowadzania danych jest zbieranie tych zdarzeń wejściowych niskiego poziomu i generowanie zdarzeń wejściowych wysokiego poziomu. Odpowiada za to, że spacja i przycisk pada „A” są odwzorowane na logiczne polecenie Skok. Zajmuje się kontrolkami gamepad vs mysz i tak dalej. Emituje zdarzenia logiczne wysokiego poziomu, które są możliwie jak najbardziej abstrakcyjne z poziomu kontrolek niskiego poziomu (są tu pewne ograniczenia, ale w zwykłym przypadku można całkowicie oderwać rzeczy).
Następnie kontroler postaci odbiera te zdarzenia i przetwarza te wejściowe zdarzenia wysokiego poziomu, aby faktycznie zareagować. Warstwa platformy wysłała zdarzenie „Klawisz spacji w dół”. System wejściowy odebrał to, przegląda tabele mapowania / logikę, a następnie wysyła zdarzenie „Pressed jump”. Logika gry / kontroler postaci odbiera to zdarzenie, sprawdza, czy gracz może faktycznie skoczyć, a następnie emituje zdarzenie „Gracz skoczył” (lub po prostu bezpośrednio powoduje skok), którego reszta logiki używa do robienia czegokolwiek .
Wszystko zależne od logiki gry trafia do kontrolera gracza. Wszystko zależne od systemu operacyjnego przechodzi w warstwę platformy. Cała reszta przechodzi do warstwy zarządzania danymi wejściowymi.
Oto kilka amatorskich dzieł ASCII, aby to opisać:
-----------------------------------------------------------------------
Platform Abstraction | Collect and forward OS input events
-----------------------------------------------------------------------
| |
| |
\ /
\_/
-----------------------------------------------------------------------
Input Manager | Translate OS input events into logical events
-----------------------------------------------------------------------
| |
| |
\ /
\_/
-----------------------------------------------------------------------
Character Controller | React to logical events and affect game play
-----------------------------------------------------------------------
| |
| |
\ /
\_/
-----------------------------------------------------------------------
Game Logic | React to player actions and provides feedback
-----------------------------------------------------------------------