Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Abschluss

Dies ist der 10. und letzte Schritt des Gamedev Canvas Tutorials. Sie können den Quellcode, wie er nach Abschluss dieser Lektion aussehen soll, unter Gamedev-Canvas-workshop/lesson10.html finden.

Es gibt immer Raum für Verbesserungen in jedem Spiel, das wir schreiben. Zum Beispiel könnten wir dem Spieler mehr als ein Leben anbieten. Sie könnten ein oder zwei Fehler machen und dennoch das Spiel beenden. Wir könnten auch unsere Code-Darstellung verbessern.

Dem Spieler Leben geben

Das Implementieren von Leben ist ziemlich einfach. Lassen Sie uns zunächst eine Variable hinzufügen, um die Anzahl der Leben zu speichern, und zwar an derselben Stelle, an der wir unsere anderen Variablen deklariert haben:

js
let lives = 3;

Das Zeichnen des Lebenszählers sieht nahezu identisch aus wie das Zeichnen des Punktestandes — fügen Sie die folgende Funktion in Ihren Code ein, unterhalb der drawScore()-Funktion:

js
function drawLives() {
  ctx.font = "16px Arial";
  ctx.fillStyle = "#0095DD";
  ctx.fillText(`Lives: ${lives}`, canvas.width - 65, 20);
}

Anstatt das Spiel sofort zu beenden, werden wir die Anzahl der Leben verringern, bis keine mehr verfügbar sind. Wir können auch die Position des Balls und des Schlägers zurücksetzen, wenn der Spieler mit seinem nächsten Leben beginnt. Ersetzen Sie in der draw()-Funktion die folgenden drei Zeilen:

js
alert("GAME OVER");
document.location.reload();
clearInterval(interval); // Needed for Chrome to end game

Damit können wir eine etwas komplexere Logik hinzufügen, wie unten angegeben:

js
lives--;
if (!lives) {
  alert("GAME OVER");
  document.location.reload();
  clearInterval(interval); // Needed for Chrome to end game
} else {
  x = canvas.width / 2;
  y = canvas.height - 30;
  dx = 2;
  dy = -2;
  paddleX = (canvas.width - paddleWidth) / 2;
}

Nun, wenn der Ball den unteren Rand des Bildschirms trifft, ziehen wir ein Leben von der lives-Variable ab. Wenn keine Leben mehr übrig sind, ist das Spiel verloren; wenn noch Leben übrig sind, werden die Position des Balls und des Schlägers zusammen mit der Bewegung des Balls zurückgesetzt.

Darstellung des Lebenszählers

Nun müssen Sie einen Aufruf von drawLives() innerhalb der draw()-Funktion hinzufügen und ihn unterhalb des drawScore()-Aufrufs platzieren.

js
drawLives();

Verbesserung der Darstellung mit requestAnimationFrame()

Arbeiten wir nun an etwas, das nicht mit den Spielmechaniken verbunden ist, sondern mit der Art und Weise, wie es dargestellt wird. requestAnimationFrame() hilft dem Browser, das Spiel besser zu rendern als die feste Bildrate, die wir derzeit mit setInterval() implementiert haben. Ersetzen Sie die folgende Zeile:

js
interval = setInterval(draw, 10);

durch:

js
draw();

und entfernen Sie jede Instanz von:

js
clearInterval(interval); // Needed for Chrome to end game

Fügen Sie dann ganz unten in der draw()-Funktion (direkt vor der schließenden geschweiften Klammer) folgende Zeile hinzu, die bewirkt, dass die draw()-Funktion sich immer wieder selbst aufruft:

js
requestAnimationFrame(draw);

Die draw()-Funktion wird nun innerhalb einer requestAnimationFrame()-Schleife immer wieder ausgeführt, aber anstatt der festen 10 Millisekunden Bildrate geben wir die Kontrolle der Bildrate zurück an den Browser. Er wird die Bildrate entsprechend synchronisieren und die Formen nur rendern, wenn es nötig ist. Dies erzeugt eine effizientere, flüssigere Animationsschleife als die ältere setInterval()-Methode.

Vergleichen Sie Ihren Code

Das war alles – die endgültige Version des Spiels ist bereit und kann losgehen!

Hinweis: Versuchen Sie, die Anzahl der Leben und den Winkel, in dem der Ball vom Schläger abprallt, zu ändern.

Spiel vorbei – vorerst!

Sie haben alle Lektionen abgeschlossen - herzlichen Glückwunsch! An diesem Punkt sollten Sie nun die Grundlagen der Canvas-Manipulation und der Logik hinter 2D-Spielen kennen. Jetzt ist ein guter Zeitpunkt, einige Frameworks zu erlernen und die Spieleentwicklung fortzusetzen. Sie können das Gegenstück dieser Serie, 2D Breakout-Spiel mit Phaser oder das Cyber Orb in Phaser erstellt Tutorial ausprobieren. Sie können auch den Spielebereich auf MDN durchstöbern, um Inspiration und mehr Wissen zu erhalten.

Sie könnten auch zur Indexseite dieser Tutorialserie zurückkehren. Viel Spaß beim Programmieren!