Comment puis-je mettre à jour sélectivement les composants de jeu XNA?

8

J'ai un petit jeu 2D sur lequel je travaille dans XNA. Jusqu'à présent, j'ai un vaisseau contrôlé par les joueurs qui fonctionne en poussée vectorielle et c'est terriblement amusant de tourner en rond. J'ai implémenté cela en tant que DrawableGameComponent et l' ai enregistré avec le jeu en utilisant game.Components.Add (this) dans le constructeur d'objet Ship.

Comment puis-je implémenter des fonctionnalités telles que la pause et un système de menus avec mon implémentation actuelle? Est-il possible de paramétrer certains GameComponents pour qu'ils ne se mettent pas à jour?

Est-ce quelque chose pour lequel je devrais même utiliser un DrawableGameComponent? Sinon, quelles sont les utilisations les plus appropriées pour cela?

Facture
la source

Réponses:

6

Vous pouvez définir la propriété Enabled du composant de jeu sur false. Le jeu ne le mettra pas à jour. Vous pouvez également définir la propriété Visible sur false et le jeu ne lui dira pas de dessiner. Cela peut devenir un peu désordonné lorsque vous avez beaucoup de composants de jeu. Vous voudrez peut-être envisager d'utiliser une gestion de l'état du jeu et de diviser vos composants de jeu en états distincts.

De cette façon, les composants du jeu qui font partie du jeu peuvent être informés de ne pas dessiner / mettre à jour lorsque l'état du jeu est dit de ne pas mettre à jour ou dessiner, etc.

Voici un assez bon exemple de gestion de l'état du jeu: Exemple de gestion de l'état du jeu

Ainsi, vous pouvez avoir votre PlayScreen (l'état dans lequel se trouve le jeu) et avoir une PauseScreen par-dessus. Le PlayScreen ne serait pas mis à jour, mais il dessinerait quand même. (Ou quelque chose de ce genre)

Michael Coleman
la source
2
Ainsi, les propriétés Enabled et Visible contrôlent si les méthodes Update () et Draw (), respectivement, seront appelées? Si Visible est faux, TOUT code de la méthode Draw () s'exécutera-t-il ou n'est-il simplement pas appelé? Affectent-ils autre chose?
Bill
3
Ils ne seront pas appelés et n'affectent que Update (Enabled) et Draw (Visible).
r2d2rigo
C'est exactement la fonctionnalité que j'espérais. Merci.
Bill