Je commence mon premier projet de jeu «approprié» et j'ai inévitablement heurté un bloc en essayant de décider comment les composants du jeu dans XNA devraient communiquer.
À partir des événements de programmation GUI (Java) précédents, les gestionnaires et les écouteurs semblaient être la voie à suivre. J'aurais donc une sorte de bus d'événements qui accepte les inscriptions d'événements et les classes abonnées à ces événements, avec des gestionnaires pour les gérer. Par exemple (pseudocode):
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
Cependant, je ne suis pas sûr de la configuration du code (en C #) qui serait nécessaire pour accomplir pleinement cela. Qu'est-ce qui garde la trace des événements (une sorte de bus?), Et comment est-il structuré?
Il semble également y avoir beaucoup de choses sur les services de jeu, où vous pouvez enregistrer un GameComponent dans votre classe Game.cs principale, puis le récupérer de n'importe où dans votre code qui a une référence à l'objet principal `` Game ''. J'ai essayé cela avec mon objet SpriteBatch et cela semble très facile .. cependant, je ne vois pas que cela soit aussi flexible qu'un modèle d'événement.
Prenez par exemple quand un ennemi meurt. Nous voulons mettre à jour le score du match. En utilisant les services, je peux obtenir une référence à mon objet StateManager créé dans Game1 et ajouté en tant que service, puis définir «score» sur la nouvelle valeur. J'aurais pensé qu'un événement `` onEnemyDeath '', qui peut être géré différemment par une multitude de classes, mais initié par 1 ligne de code dans la section `` détection de mort ennemie '', serait mieux que de lancer individuellement chaque GameComponent requis puis d'appeler ce que des méthodes sont nécessaires.
Ou ces stratégies sont-elles inférieures à autre chose?
Je me rends compte que c'est en partie ma mauvaise connaissance de C # autant que les paradigmes de communication de jeu, mais j'aimerais vraiment bien comprendre cette chose fondamentale.
Mise à jour
Ayant examiné les services est plus détaillé, je suis moins convaincu - il s'agit essentiellement de passer une variable globale (d'après ce que je comprends).
Mise à jour 2
Après avoir regardé ce didacticiel de base sur la gestion des événements et le test de l'exemple de code, il semble que les événements seraient un choix logique pour ce dont je discute. Mais je ne peux pas en utiliser beaucoup dans les échantillons que j'ai vus. Y a-t-il une raison évidente pour laquelle on ne devrait pas?