XNAPong Phase 3: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
Die Seite wurde neu angelegt: „==== Phase 3 - Der Rest ==== * Punkteanzeige * Siegbedingung Text wird in XNA auch mit Hilfe einer SpriteBatch Instanz gezeichnet. Allerdings benötigt man ansta…“ |
LeonH (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (3 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Zurück zu [[XNAPong_Phase_2 | Phase 2]] | |||
{{löschen}} | |||
==== Phase 3 - Der Rest ==== | ==== Phase 3 - Der Rest ==== | ||
* Punkteanzeige | * Punkteanzeige | ||
| Zeile 31: | Zeile 35: | ||
scoreText = "L:" + score[0] + " - R:" + score[1] + ""; | scoreText = "L:" + score[0] + " - R:" + score[1] + ""; | ||
ballDirection.X *= -1; | ballDirection.X *= -1; | ||
ball.X = GraphicsDevice.Viewport.Width / 2; | |||
} | } | ||
| Zeile 43: | Zeile 47: | ||
Falls der Ball den Bildschirm verlässt wird der Punktestand des entsprechenden Spielers erhöht und der zu zeichnende Punktestrink aktualisiert. Der Ball wird ausserdem wieder auf das Spielfeld versetzt und seine Flugrichtung umgekehrt. | Falls der Ball den Bildschirm verlässt wird der Punktestand des entsprechenden Spielers erhöht und der zu zeichnende Punktestrink aktualisiert. Der Ball wird ausserdem wieder auf das Spielfeld versetzt und seine Flugrichtung umgekehrt. | ||
Schliesslich muss das Spiel noch erkennen wann ein Spieler gewonnen hat. Wir lösen das Problem in dem wir in Update() testen ob ein Spieler die notwendige Punktzahl erreicht hat und nur falls das nicht der Fall ist, geht das Spiel wie gewohnt weiter, ansonsten zeigt es nur noch die Siegernachricht an: | |||
* Update(): | |||
protected override void Update(GameTime gameTime) | |||
{ | |||
if (score[0] == 10) | |||
{ | |||
scoreText = "Left Player Won"; | |||
} | |||
else if (score[1] == 10) | |||
{ | |||
scoreText = "Right Player Won"; | |||
} | |||
else | |||
{ | |||
HandlePlayerInput(); | |||
ball.X += (int)ballDirection.X; | |||
ball.Y += (int)ballDirection.Y; | |||
if (ball.Intersects(rightPaddle) || ball.Intersects(leftPaddle)) | |||
ballDirection.X *= -1; | |||
if (ball.Y < 0 || ball.Y > GraphicsDevice.Viewport.Height - ball.Height) | |||
ballDirection.Y *= -1; | |||
if (ball.X + ball.Width < 0) | |||
{ | |||
score[1]++; | |||
scoreText = "L:" + score[0] + " - R:" + score[1] + ""; | |||
ballDirection.X *= -1; | |||
ball.X = GraphicsDevice.Viewport.Width / 2; | |||
} | |||
if (ball.X > GraphicsDevice.Viewport.Width) | |||
{ | |||
score[0]++; | |||
scoreText = "L:" + score[0] + " - R:" + score[1] + ""; | |||
ballDirection.X *= -1; | |||
ball.X = GraphicsDevice.Viewport.Width / 2; | |||
} | |||
} | |||
base.Update(gameTime); | |||
} | |||
Die letzte und entscheidenste Änderung muss nun noch in der Draw() Methode vorgenommen werden. Die GraphicsDevice.Clear() Zeile sollte anschliessend so aussehen: | Die letzte und entscheidenste Änderung muss nun noch in der Draw() Methode vorgenommen werden. Die GraphicsDevice.Clear() Zeile sollte anschliessend so aussehen: | ||
GraphicsDevice.Clear(Color.SteelBlue); // oder auch jede andere farbe AUSSER CornflowerBlue | GraphicsDevice.Clear(Color.SteelBlue); // oder auch jede andere farbe AUSSER CornflowerBlue | ||
