Dans chaque jeu, un développeur doit probablement gérer les entrées, que ce soit de simples événements de clavier et de souris, des événements tactiles ou quelque chose comme entrée d'accéléromètre. Cette entrée affecte directement les objets du jeu. Parfois, la même entrée peut affecter différents objets. Maintenant, je réfléchis à la façon de modéliser cela. Selon moi, il existe deux approches différentes.
Laissez l'objet de jeu le gérer lui-même, abonnez-vous aux événements et appelez ses propres méthodes. Cela a l'avantage de laisser les objets du jeu décider eux-mêmes quelles entrées provoquent quelle action. Un inconvénient semble être que le code d'entrée est altéré avec le code d'objet de jeu "de base". De plus, les objets du jeu ne connaissent pas l'état du reste du jeu et ne doivent parfois pas agir sur les événements d'entrée. Cela ne semble pas correct.
Demandez à un contrôleur général des entrées de s'occuper de toutes les entrées et de décider qui peut gérer quel événement. Cela semble mieux séparer les préoccupations, mais couple étroitement la classe de contrôleur d'entrée aux objets de jeu. Il a en quelque sorte besoin de savoir qui veut recevoir quel événement et dans quel état. Cela ne semble pas correct non plus.
Quelles stratégies utilisez-vous pour gérer cela?
la source
Je suggère que votre jeu (le modèle ) définisse une liste d'événements d'entrée possibles (implémentés sous forme d'énumérations ou d'objets avec une interface de base en commun). Des choses comme ça
MovingRightStarted
,MovingRightStopped
,FiredWeapon1
,Escape
, etc ...Le jeu définit une structure de données (par exemple a
queue
) que votre code d'entrée (le contrôleur ) peut remplir avec des événements d'entrée.Ensuite, votre jeu peut interroger la structure de données pour obtenir les événements d'entrée.
De cette façon, vous pouvez brancher différents types de contrôleurs pour alimenter le modèle:
Vous les avez juste pour pousser les événements d'entrée vers le modèle.
la source
queue
type de données pour stocker cela. Pourriez-vous expliquer pourquoi?