Abschluss
Dies 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 erstellen. Zum Beispiel können wir dem Spieler mehr als ein Leben anbieten. Er könnte ein oder zwei Fehler machen und dennoch in der Lage sein, das Spiel zu beenden. Wir könnten auch unser Code-Rendering verbessern.
Dem Spieler ein paar 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, 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 zu 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, reduzieren wir die Anzahl der Leben, bis sie nicht mehr verfügbar sind. Wir können auch die Ball- und Schlägerposition 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
Mit dieser Änderung können wir der folgenden, etwas komplexeren Logik hinzufügen:
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 ziehen wir, wenn der Ball den unteren Rand des Bildschirms berührt, ein Leben von der lives
Variablen 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.
Anzeige der Leben rendern
Nun müssen Sie einen Aufruf zu drawLives()
innerhalb der draw()
Funktion hinzufügen und ihn unterhalb des drawScore()
Aufrufs platzieren.
drawLives();
Verbesserung des Renderings mit requestAnimationFrame()
Arbeiten wir nun an etwas, das nicht mit den Spielmechaniken verbunden ist, sondern mit der Art, wie es gerendert 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:
interval = setInterval(draw, 10);
mit:
draw();
und entfernen Sie jede Instanz von:
clearInterval(interval); // Needed for Chrome to end game
Dann fügen Sie ganz unten in der draw()
Funktion (direkt vor der schließenden geschweiften Klammer) die folgende Zeile hinzu, 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 wieder an den Browser. Er wird die Bildrate entsprechend synchronisieren und die Formen nur dann rendern, wenn es nötig ist. Dies erzeugt eine effizientere, fließendere Animationsschleife als die ältere setInterval()
Methode.
Vergleich Ihres Codes
Das war's — die endgültige Version des Spiels ist bereit und kann loslegen!
Hinweis: Versuchen Sie, die Anzahl der Leben und den Winkel zu ändern, in dem der Ball vom Schläger abprallt.
Spiel beendet - 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, um einige Frameworks zu lernen und die Spieleentwicklung fortzusetzen. Sie können sich das Gegenstück dieser Serie ansehen, das 2D Breakout Game mit Phaser oder das Cyber Orb mit Phaser Tutorial. Sie können auch den Spielebereich auf MDN durchstöbern, um Inspiration und mehr Wissen zu sammeln.
Sie könnten auch zur Indexseite dieser Tutorialserie zurückgehen. Viel Spaß beim Codieren!