Abschluss
Das ist der 10. und letzte Schritt des Gamedev Canvas Tutorials. Sie finden den Quellcode, 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önnen wir dem Spieler mehr als ein Leben bieten. Er könnte 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 wir zunächst eine Variable hinzu, um die Anzahl der Leben zu speichern, an der Stelle, wo wir auch unsere anderen Variablen deklariert haben:
let lives = 3;
Das Zeichnen des Lebenszählers sieht fast genauso aus wie das Zeichnen des Punktestandes — fügen Sie die folgende Funktion Ihrem Code hinzu, 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, werden wir die Anzahl der Leben verringern, bis sie nicht 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:
alert("GAME OVER");
document.location.reload();
clearInterval(interval); // Needed for Chrome to end game
Damit können wir etwas 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;
}
Jetzt, 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, dann werden die Position des Balls und des Schlägers zurückgesetzt, zusammen mit der Bewegung des Balls.
Darstellung der Lebensanzeige
Nun müssen Sie einen Aufruf zu drawLives()
in die draw()
-Funktion hinzufügen und es unter dem Aufruf von drawScore()
platzieren.
drawLives();
Verbesserung der Darstellung mit requestAnimationFrame()
Jetzt arbeiten wir 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 darzustellen 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
Dann fügen Sie ganz am Ende der draw()
-Funktion (kurz vor der schließenden geschweiften Klammer) die folgende Zeile ein, die bewirkt, dass die draw()
-Funktion sich immer wieder selbst aufruft:
requestAnimationFrame(draw);
Die draw()
-Funktion wird nun immer wieder in einer requestAnimationFrame()
-Schleife ausgeführt, aber anstatt der festen 10 Millisekunden Bildrate geben wir die Kontrolle über die Bildrate an den Browser zurück. Der Browser wird die Bildrate entsprechend synchronisieren und die Formen nur bei Bedarf rendern. 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 fertig 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 - herzlichen Glückwunsch! Zu diesem Zeitpunkt 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 mit der Spieleentwicklung fortzufahren. Sie können das Gegenstück dieser Serie anschauen, 2D Breakout-Spiel mit Phaser oder das Cyber Orb in Phaser gebaut Tutorial. Sie können auch die Spielesektion auf MDN durchstöbern, um Inspiration und mehr Wissen zu erhalten.
Sie könnten auch zur Indexseite dieser Tutorial-Serie zurückkehren. Viel Spaß beim Programmieren!