Schaltflächen
Dies ist der 11. von 12 Schritten im Tutorial zum Erstellen eines Breakout-Spiels mit Phaser. Anstatt das Spiel sofort zu starten, können wir die Entscheidung den Spielenden überlassen, indem wir eine Startschaltfläche hinzufügen. Sehen wir uns an, wie das geht.
Neue Eigenschaften
Wir benötigen eine Eigenschaft für einen booleschen Wert, der angibt, ob das Spiel gerade läuft, und eine weitere für die Schaltfläche. Fügen Sie diese Zeilen unter Ihren anderen Eigenschaftsdefinitionen hinzu:
class ExampleScene extends Phaser.Scene {
// ... previous property definitions ...
playing = false;
startButton;
// ... rest of the class ...
}
Das Spritesheet der Schaltfläche laden
Wir können das Spritesheet der Schaltfläche genauso laden wie die Wackelanimation des Balls. Fügen Sie Folgendes am Ende der Methode preload() hinzu:
this.load.spritesheet("button", "img/button.png", {
frameWidth: 120,
frameHeight: 40,
});
Ein einzelner Frame der Schaltfläche ist 120 Pixel breit und 40 Pixel hoch.
Sie müssen außerdem das Spritesheet der Schaltfläche herunterladen und in Ihrem Verzeichnis /img speichern.
Die Schaltfläche zum Spiel hinzufügen
Die neue Schaltfläche wird mit der Methode add.sprite zum Spiel hinzugefügt. Fügen Sie die folgenden Zeilen am Ende Ihrer Methode create() hinzu:
this.startButton = this.add.sprite(
this.scale.width * 0.5,
this.scale.height * 0.5,
"button",
0,
);
Zusätzlich zu den Parametern, die wir bei den anderen Aufrufen von add.sprite übergeben haben (etwa beim Hinzufügen von Ball und Schläger), übergeben wir diesmal auch die Frame-Nummer, in diesem Fall 0. Dadurch wird der erste Frame des Spritesheets für das anfängliche Aussehen der Schaltfläche verwendet.
Eingaben über die Schaltfläche verarbeiten
Damit die Schaltfläche auf verschiedene Eingaben wie Mausklicks reagiert, fügen Sie direkt nach dem vorherigen Aufruf von add.sprite die folgenden Zeilen hinzu:
this.startButton.setInteractive();
this.startButton.on(
"pointerover",
() => {
this.startButton.setFrame(1);
},
this,
);
this.startButton.on(
"pointerdown",
() => {
this.startButton.setFrame(2);
},
this,
);
this.startButton.on(
"pointerout",
() => {
this.startButton.setFrame(0);
},
this,
);
this.startButton.on(
"pointerup",
() => {
this.startGame();
},
this,
);
Zunächst rufen wir setInteractive für die Schaltfläche auf, damit sie auf Pointer-Ereignisse reagiert. Anschließend fügen wir der Schaltfläche vier Event-Listener hinzu:
pointerover– Wenn sich der Pointer über der Schaltfläche befindet, wechseln wir zum Frame1, dem zweiten Frame des Spritesheets.pointerdown– Wenn die Schaltfläche gedrückt wird, wechseln wir zum Frame2, dem dritten Frame des Spritesheets.pointerout– Wenn der Pointer die Schaltfläche verlässt, wechseln wir zurück zum Frame0, dem ersten Frame des Spritesheets.pointerup– Wenn die Schaltfläche losgelassen wird, rufen wir die MethodestartGameauf, um das Spiel zu starten.
Das Spiel starten
Jetzt müssen wir die oben referenzierte Methode startGame() definieren:
class ExampleScene extends Phaser.Scene {
// ...
startGame() {
this.startButton.destroy();
this.ball.body.setVelocity(150, -150);
this.playing = true;
}
}
Wenn die Schaltfläche gedrückt wird, entfernen wir sie, legen die Anfangsgeschwindigkeit des Balls fest und setzen die Eigenschaft playing auf true.
Kehren Sie zum Abschluss dieses Abschnitts zu Ihrer Methode create zurück, suchen Sie die Zeile this.ball.body.setVelocity(150, -150); und entfernen Sie sie. Der Ball soll sich erst bewegen, wenn die Schaltfläche gedrückt wurde!
Den Schläger vor Spielbeginn stillhalten
Das funktioniert wie erwartet, aber wir können den Schläger auch dann noch bewegen, wenn das Spiel noch nicht begonnen hat. Das wirkt etwas seltsam. Um das zu verhindern, können wir die Eigenschaft playing nutzen und den Schläger nur dann beweglich machen, wenn das Spiel begonnen hat. Passen Sie dazu die Methode update() wie folgt an:
class ExampleScene extends Phaser.Scene {
// ...
update() {
// ...
if (this.playing) {
this.paddle.x = this.input.x || this.scale.width * 0.5;
}
// ...
}
// ...
}
So bleibt der Schläger unbeweglich, nachdem alles geladen und vorbereitet wurde, aber bevor das eigentliche Spiel beginnt.
Vergleichen Sie Ihren Code
So sollte Ihr bisheriger Stand aussehen. Das Beispiel ist direkt ausführbar. Um den Quellcode anzuzeigen, klicken Sie auf die Schaltfläche „Play“.
Nächste Schritte
Als Letztes werden wir in dieser Artikelserie das Spiel noch interessanter gestalten, indem wir etwas Zufälligkeit in die Art bringen, wie der Ball vom Schläger abprallt.