In wahrscheinlich jedem Spiel muss sich ein Entwickler irgendwie mit Eingaben befassen, es können einfache Tastatur- und Mausereignisse, Berührungsereignisse oder etwas wie eine Beschleunigungsmessereingabe sein. Diese Eingabe wirkt sich direkt oder indirekt auf Objekte im Spiel aus. Manchmal kann dieselbe Eingabe unterschiedliche Objekte beeinflussen. Jetzt habe ich darüber nachgedacht, wie ich das modellieren soll. Meines Erachtens gibt es zwei verschiedene Ansätze.
Lassen Sie das Spielobjekt selbst damit umgehen, abonnieren Sie die Ereignisse und rufen Sie seine eigenen Methoden auf. Dies hat den Vorteil, dass die Spielobjekte selbst entscheiden können, welche Eingaben welche Aktion auslösen. Ein Nachteil scheint zu sein, dass der eingegebene Code mit dem "Kern" -Spielobjektcode verfälscht wird. Außerdem kennen die Spielobjekte den Status des restlichen Spiels nicht und sollten manchmal möglicherweise nicht auf Eingabeereignisse reagieren. Das scheint nicht richtig zu sein.
Lassen Sie alle Eingaben von einem allgemeinen Eingabecontroller erledigen und entscheiden, wer mit welchem Ereignis fertig wird. Dies scheint die Bedenken besser zu trennen, koppelt aber die Input-Controller-Klasse eng mit den Spielobjekten. Es muss irgendwie wissen, wer welches Ereignis in welchem Zustand empfangen möchte. Dies scheint auch nicht richtig zu sein.
Mit welchen Strategien gehen Sie damit um?
quelle
Ich würde vorschlagen, dass Ihr Spiel (das Modell ) eine Liste möglicher Eingabeereignisse definiert (implementiert als Aufzählungen oder Objekte mit einer gemeinsamen Basisschnittstelle). Dinge wie
MovingRightStarted
,MovingRightStopped
,FiredWeapon1
,Escape
, etc ...Das Spiel definiert eine Datenstruktur (zum Beispiel a
queue
), die Ihr Eingabecode (der Controller ) mit Eingabeereignissen füllen kann.Anschließend kann Ihr Spiel die Datenstruktur abfragen, um die Eingabeereignisse abzurufen.
Auf diese Weise können Sie verschiedene Arten von Controllern anschließen, um das Modell zu versorgen:
Sie müssen sie nur zum Übertragen von Eingabeereignissen auf das Modell verwenden.
quelle
queue
Datentyp als Datentyp zum Speichern ausgewählt haben. Kannst du erklären warum?