Wie kann ich XNA GameComponents selektiv aktualisieren?

8

Ich habe ein kleines 2D-Spiel, an dem ich in XNA arbeite. Bisher habe ich ein spielergesteuertes Schiff, das mit Vektorschub arbeitet und es furchtbar lustig macht, sich im Kreis zu drehen. Ich habe dies als DrawableGameComponent implementiert und es mit game.Components.Add (this) im Ship-Objektkonstruktor beim Spiel registriert .

Wie kann ich mit meiner aktuellen Implementierung Funktionen wie Pause und ein Menüsystem implementieren? Ist es möglich, bestimmte GameComponents so einzustellen, dass sie nicht aktualisiert werden?

Ist dies etwas, für das ich überhaupt eine DrawableGameComponent verwenden sollte? Wenn nicht, welche Verwendungszwecke sind dafür besser geeignet?

Rechnung
quelle

Antworten:

6

Sie können die Enabled-Eigenschaft für die Spielkomponente auf false setzen. Das Spiel wird es nicht aktualisieren. Sie können die Visible-Eigenschaft auch auf false setzen, und das Spiel weist sie nicht zum Zeichnen an. Es kann etwas chaotisch werden, wenn Sie viele Spielkomponenten haben. Möglicherweise möchten Sie eine Verwaltung des Spielstatus verwenden und Ihre Spielkomponenten in separate Status unterteilen.

Auf diese Weise kann Spielkomponenten, die Teil des Spiels sind, angewiesen werden, nicht zu zeichnen / zu aktualisieren, wenn der Spielstatus angewiesen wird, nicht zu aktualisieren oder zu zeichnen usw.

Das ist ein ziemlich gutes Beispiel für Spielstatus - Management: Game State Management - Probe

Dann könnten Sie Ihren PlayScreen (den Status mit dem Spiel) und einen PauseScreen darüber haben. Der PlayScreen würde nicht aktualisiert, aber er würde trotzdem zeichnen. (oder so etwas)

Michael Coleman
quelle
2
Die Eigenschaften Aktiviert und Sichtbar steuern also, ob die Methoden Update () und Draw () aufgerufen werden. Wenn Visible falsch ist, wird JEDER Code in der Draw () -Methode ausgeführt oder wird er einfach nicht aufgerufen? Beeinflussen sie noch etwas?
Bill
3
Sie werden nicht aufgerufen und wirken sich nur auf Aktualisieren (Aktiviert) und Zeichnen (Sichtbar) aus.
r2d2rigo
Dann ist dies genau die Funktionalität, auf die ich gehofft habe. Vielen Dank.
Bill