Abschluss

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

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

Dem Spieler einige Leben geben

Das Implementieren von Leben ist ziemlich einfach. Fügen Sie zuerst eine Variable hinzu, um die Anzahl der Leben zu speichern, an derselben Stelle, an der wir unsere anderen Variablen deklariert haben:

js
let lives = 3;

Das Zeichnen des Lebenszählers sieht fast genauso aus wie das Zeichnen des Punktestands – fügen Sie die folgende Funktion zu Ihrem Code hinzu, 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 reduzieren, bis sie nicht mehr verfügbar sind. Wir können auch die Positionen 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

Wir können 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;
}

Jetzt, wenn der Ball den unteren Bildschirmrand 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 sowie die Bewegung des Balls zurückgesetzt.

Rendering der Lebensanzeige

Nun müssen Sie einen Aufruf zu drawLives() in die draw() Funktion einfügen und ihn unterhalb des Aufrufs von drawScore() hinzufügen.

js
drawLives();

Verbesserung des Renderings mit requestAnimationFrame()

Kommen wir jetzt zu etwas, das nicht mit der Spielmechanik zusammenhängt, sondern mit der Art und Weise, wie es gerendert wird. requestAnimationFrame() hilft dem Browser, das Spiel besser als die feste Bildrate zu rendern, 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 am Ende der draw() Funktion (direkt vor der schließenden geschweiften Klammer) die folgende Zeile hinzu, die verursacht, dass die draw() Funktion sich immer wieder selbst aufruft:

js
requestAnimationFrame(draw);

Die draw() Funktion wird jetzt immer wieder in einer requestAnimationFrame() Schleife ausgeführt, aber anstatt der festen Bildrate von 10 Millisekunden geben wir dem Browser die Kontrolle über die Bildrate zurück. Er wird die Bildrate entsprechend synchronisieren und die Formen nur dann rendern, wenn es nötig ist. Dies führt zu einer effizienteren, flüssigeren Animationsschleife als die ältere setInterval() Methode.

Vergleichen Sie Ihren Code

Das war's — die endgültige Version des Spiels ist bereit und startklar!

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

Spiel vorbei - vorerst!

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

Sie könnten auch zur Indexseite dieser Tutorial-Serie zurückkehren. Viel Spaß beim Codieren!