Abschließen
Dies ist der 10. und letzte Schritt des Gamedev Canvas-Tutorials. Sie finden den Quellcode, so wie er nach Abschluss dieser Lektion aussehen sollte, unter Gamedev-Canvas-workshop/lesson10.html.
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. So könnte er ein oder zwei Fehler machen und trotzdem das Spiel beenden. Wir könnten auch unser Rendering-Code verbessern.
Dem Spieler einige Leben geben
Die Implementierung von Leben ist ziemlich einfach. Lassen Sie uns zuerst eine Variable hinzufügen, um die Anzahl der Leben zu speichern, an derselben Stelle, an der wir unsere anderen Variablen deklariert haben:
let lives = 3;
Das Zeichnen des Lebenszählers sieht fast genauso aus wie das Zeichnen des Punktezählers — fügen Sie die folgende Funktion in Ihren Code ein, unterhalb der drawScore()
-Funktion:
function drawLives() {
ctx.font = "16px Arial";
ctx.fillStyle = "#0095DD";
ctx.fillText(`Lives: ${lives}`, canvas.width - 65, 20);
}
Anstatt das Spiel sofort zu beenden, verringern wir die Anzahl der Leben, 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 also in der draw()
-Funktion die folgenden drei Zeilen:
alert("GAME OVER");
document.location.reload();
clearInterval(interval); // Needed for Chrome to end game
Mit diesem Code können wir dem ganze leicht komplexere Logik hinzufügen, wie unten angegeben:
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 die untere Kante 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 zurückgesetzt, zusammen mit der Bewegung des Balls.
Rendering der Lebensanzeige
Nun müssen Sie einen Aufruf zu drawLives()
innerhalb der draw()
-Funktion hinzufügen und ihn unterhalb des drawScore()
-Aufrufs hinzufügen.
drawLives();
Verbesserung des Renderings mit requestAnimationFrame()
Arbeiten wir nun an etwas, das nicht mit den Spielmechaniken, sondern mit der Art und Weise, wie es gerendert wird, verbunden ist. requestAnimationFrame()
hilft dem Browser dabei, das Spiel besser zu rendern als die feste Bildrate, die wir derzeit mit setInterval()
implementiert haben. Ersetzen Sie die folgende Zeile:
interval = setInterval(draw, 10);
durch:
draw();
und entfernen Sie jede Instanz von:
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 dazu führt, dass die draw()
-Funktion sich immer wieder selbst aufruft:
requestAnimationFrame(draw);
Die draw()
-Funktion wird jetzt immer wieder innerhalb einer requestAnimationFrame()
-Schleife ausgeführt, aber anstatt der festen 10 Millisekunden-Bildrate geben wir die Kontrolle über die Bildrate zurück an den Browser. Dieser wird die Bildrate entsprechend synchronisieren und die Formen nur rendern, wenn dies notwendig 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 einsatzbereit!
Hinweis: Versuchen Sie, die Anzahl der Leben und den Winkel zu ändern, in dem der Ball vom Schläger abprallt.
Spiel vorbei - für jetzt!
Sie haben alle Lektionen abgeschlossen - herzlichen 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 Spielentwicklung fortzusetzen. Sie können sich das Pendant dieser Serie ansehen, 2D-Breakout-Spiel mit Phaser oder das Cyber Orb gebaut in Phaser Tutorial. Sie können auch den Spielebereich auf MDN durchstöbern, um Inspiration und mehr Wissen zu erhalten.
Sie könnten auch zur Indexseite dieser Tutorialreihe zurückkehren. Viel Spaß beim Programmieren!