Come posso aggiornare selettivamente XNA GameComponents?


8

Ho un piccolo gioco 2D su cui sto lavorando in XNA. Finora ho una nave controllata dal giocatore che opera su spinta vettoriale ed è terribilmente divertente girare in tondo. L'ho implementato come DrawableGameComponent e l' ho registrato con il gioco usando game.Components.Add (questo) nel costruttore di oggetti Ship.

Come posso implementare funzionalità come la pausa e un sistema di menu con la mia attuale implementazione? È possibile impostare alcuni GameComponents per non aggiornare?

È qualcosa per cui dovrei persino usare un DrawableGameComponent? In caso contrario, quali sono gli usi più appropriati per questo?

Risposte:


6

Puoi impostare la proprietà Enabled sul componente di gioco su false. Il gioco non lo aggiornerà. Puoi anche impostare la proprietà Visible su false e il gioco non gli dirà di disegnare. Può diventare un po 'disordinato quando hai molti componenti di gioco. Potresti prendere in considerazione l'utilizzo di una gestione dello stato di gioco e la suddivisione dei componenti di gioco in stati separati.

In questo modo si può dire ai componenti di gioco che fanno parte del gioco di non disegnare / aggiornare quando viene detto allo stato di gioco di non aggiornare o disegnare, ecc.

Questo è un ottimo esempio di gestione dello stato di gioco: Esempio di gestione dello stato di gioco

Quindi potresti avere il tuo PlayScreen (lo stato con il gioco all'interno) e avere un PauseScreen sopra di esso. La PlayScreen non verrebbe aggiornata, ma continuerebbe a disegnare. (o qualcosa del genere)


2
Quindi le proprietà Enabled e Visible controllano se i metodi Update () e Draw () saranno rispettivamente chiamati? Se Visible è falso, verrà eseguito QUALSIASI codice nel metodo Draw () o semplicemente non viene chiamato? Interessano qualcos'altro?
Bill

3
Non verranno chiamati e influiranno solo su Aggiorna (Abilitato) e Disegna (Visibile).
r2d2rigo,

Quindi questa è esattamente la funzionalità che speravo. Grazie.
Bill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.