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

View in English Always switch to English

Zusätzliche Leben

Dies ist der 8. Schritt von 11 im Tutorial zum Erstellen eines Breakout-Spiels mit reinem JavaScript. In diesem Artikel implementieren wir ein Lebenssystem, damit die spielende Person erst nach dem Verlust von drei Leben statt nur einem aufhören muss. So bleibt das Spiel länger unterhaltsam.

Neue Variablen

Fügen Sie unter let score = 0; zwei neue Variablen hinzu, um die Anzahl der Leben und die Information zu speichern, ob die Meldung über ein verlorenes Leben angezeigt werden soll:

js
let lives = 3;
let showLifeLostText = false;

Textbeschriftungen zeichnen

Das Zeichnen von Text kennen wir bereits aus der Lektion Punktestand erfassen und gewinnen. Ersetzen Sie drawScore() durch eine Funktion namens drawStatus(), die den Punktestand, die verbleibenden Leben und beim Verlust eines Lebens eine Meldung zeichnet:

js
function drawStatus() {
  ctx.font = "18px Arial";
  ctx.fillStyle = "#0095dd";
  ctx.textBaseline = "top";
  ctx.textAlign = "left";
  ctx.fillText(`Points: ${score}`, 5, 5);

  ctx.textAlign = "right";
  ctx.fillText(`Lives: ${lives}`, canvas.width - 5, 5);

  if (showLifeLostText) {
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    ctx.fillText(
      "Life lost, click to continue",
      canvas.width / 2,
      canvas.height / 2,
    );
  }
}

Die drei Beschriftungen verwenden dieselbe Schriftart und Farbe. Mit textAlign und textBaseline positionieren wir den Punktestand oben links, die Leben oben rechts und die Meldung über ein verlorenes Leben in der Mitte (wenn showLifeLostText den Wert true hat).

Ersetzen Sie in update() den Aufruf von drawScore() durch drawStatus().

Code zur Verwaltung der Leben

Um Leben in unserem Spiel zu implementieren, ändern wir zunächst, was passiert, wenn der Ball den Spielbereich verlässt. Statt das Spiel sofort neu zu starten:

js
if (ballIsOutOfBounds) {
  // Game over logic
  location.reload();
  return;
}

rufen wir eine neue Funktion namens ballLeaveScreen() auf. Löschen Sie die vorherigen Zeilen (oben gezeigt) und ersetzen Sie sie durch die folgende Zeile:

js
if (ballIsOutOfBounds) {
  ballLeaveScreen();
  return;
}

Das return verhindert, dass nach dem Verlassen des Spielbereichs durch den Ball die restlichen Bewegungen und Kollisionen für diesen Frame verarbeitet werden.

Die Anzahl der Leben soll jedes Mal sinken, wenn der Ball das Canvas verlässt. Fügen Sie Ihrem Code die Funktion ballLeaveScreen() hinzu:

js
function ballLeaveScreen() {
  lives--;
  if (lives === 0) {
    // Game over logic
    location.reload();
    return;
  }

  paddle.pos.x = canvas.width / 2;
  ball.pos.x = paddle.pos.x;
  ball.pos.y = paddle.hitbox.top - ball.size.h / 2;
  ball.vel = { x: 0, y: 0 };
  showLifeLostText = true;
  canvas.addEventListener(
    "pointerdown",
    () => {
      showLifeLostText = false;
      ball.vel = { x: 150, y: -150 };
      lastTimestamp = null;
    },
    { once: true },
  );
}

Statt beim Verlust eines Lebens sofort eine Warnmeldung anzuzeigen, ziehen wir zunächst ein Leben von der aktuellen Anzahl ab und prüfen, ob der Wert noch größer als null ist. Falls ja, sind noch Leben übrig und das Spiel kann weitergehen: Die Meldung über das verlorene Leben wird angezeigt, die Positionen von Ball und Schläger werden zurückgesetzt, und bei der nächsten Eingabe (Klick oder Berührung) wird die Meldung ausgeblendet und der Ball setzt sich wieder in Bewegung.

Wenn die Anzahl der verfügbaren Leben null erreicht, ist das Spiel vorbei und die entsprechende Warnmeldung wird angezeigt.

Vergleichen Sie Ihren Code

Hier sehen Sie den bisherigen Stand als lauffähiges Beispiel. Um den Quellcode anzusehen, klicken Sie auf die Schaltfläche „Play“.

Nächste Schritte

Durch die Leben verzeiht das Spiel mehr Fehler: Wenn Sie ein Leben verlieren, bleiben Ihnen noch zwei und Sie können weiterspielen. Als Nächstes verbessern wir das Erscheinungsbild und Spielgefühl durch Animationen und Tweens.