Buttons
Dies ist der 15. Schritt von 16 des Gamedev Phaser Tutorials. Anstatt das Spiel sofort zu starten, können wir diese Entscheidung dem Spieler überlassen, indem wir einen Start-Button hinzufügen, den er drücken kann. Lassen Sie uns untersuchen, wie das geht.
Neue Eigenschaften
Wir benötigen eine Eigenschaft, um einen booleschen Wert zu speichern, der darstellt, ob das Spiel gerade gespielt wird oder nicht, und eine weitere, um unseren Button darzustellen. 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 ...
}
Laden des Button-Spritesheets
Wir können das Button-Spritesheet laden, genau wie wir die Wobble-Animation des Balls geladen haben. Fügen Sie Folgendes am Ende der preload()
-Methode hinzu:
this.load.spritesheet("button", "img/button.png", {
frameWidth: 120,
frameHeight: 40,
});
Ein einzelner Button-Rahmen ist 120 Pixel breit und 40 Pixel hoch.
Sie müssen auch das Button-Spritesheet herunterladen und es in Ihrem /img
Verzeichnis speichern.
Hinzufügen des Buttons zum Spiel
Das Hinzufügen des neuen Buttons zum Spiel erfolgt durch die Verwendung der add.sprite
Methode. Fügen Sie die folgenden Zeilen am Ende Ihrer create()
Methode 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 add.sprite
-Aufrufen übergeben haben (wie beim Hinzufügen des Balls und des Paddels), geben wir diesmal auch die Rahmennummer an, die in diesem Fall 0
ist. Das bedeutet, dass der erste Rahmen des Spritesheets für das anfängliche Erscheinungsbild des Buttons verwendet wird.
Um den Button auf verschiedene Eingaben wie Mausklicks reagieren zu lassen, müssen wir die folgenden Zeilen direkt nach dem vorherigen add.sprite
-Aufruf hinzufügen:
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,
);
Zuerst rufen wir setInteractive
auf dem Button auf, um ihn auf Zeigerereignisse reagieren zu lassen. Dann fügen wir dem Button die vier Ereignislistener hinzu:
pointerover
: Wenn sich der Zeiger über dem Button befindet, ändern wir den Button-Rahmen auf1
, den zweiten Rahmen des Spritesheets.pointerdown
: Wenn der Button gedrückt wird, ändern wir den Button-Rahmen auf2
, den dritten Rahmen des Spritesheets.pointerout
: Wenn der Zeiger den Button verlässt, ändern wir den Button-Rahmen zurück auf0
, den ersten Rahmen des Spritesheets.pointerup
: Wenn der Button losgelassen wird, rufen wir diestartGame
-Methode auf, um das Spiel zu starten.
Nun müssen wir die oben im Code erwähnte startGame()
Methode definieren:
class ExampleScene extends Phaser.Scene {
// ...
startGame() {
this.startButton.destroy();
this.ball.body.setVelocity(150, -150);
this.playing = true;
}
}
Wenn der Button gedrückt wird, entfernen wir den Button, setzen die Anfangsgeschwindigkeit des Balls und setzen die playing
Eigenschaft auf true
.
Abschließend für diesen Abschnitt, gehen Sie zurück in Ihre create
Methode, finden Sie die Zeile this.ball.body.setVelocity(150, -150);
und entfernen Sie sie. Der Ball soll sich erst bewegen, wenn der Button gedrückt wurde, nicht vorher!
Das Paddle unbeweglich halten, bevor das Spiel startet
Es funktioniert wie erwartet, aber wir können das Paddle noch bewegen, wenn das Spiel noch nicht gestartet wurde, was etwas albern aussieht. Um dies zu verhindern, können wir die playing
Eigenschaft nutzen und das Paddle nur beweglich machen, wenn das Spiel gestartet wurde. Dafür passen Sie die update()
Methode folgendermaßen an:
class ExampleScene extends Phaser.Scene {
// ...
update() {
// ...
if (this.playing) {
this.paddle.x = this.input.x || this.scale.width * 0.5;
}
// ...
}
// ...
}
Auf diese Weise ist das Paddle unbeweglich, nachdem alles geladen und vorbereitet wurde, aber bevor das eigentliche Spiel beginnt.
Vergleichen Sie Ihren Code
Hier ist, was Sie bisher haben sollten, live laufend. Um den Quellcode anzusehen, klicken Sie auf den "Play" Button.
Nächste Schritte
Das Letzte, was wir in dieser Artikelreihe tun werden, ist, das Gameplay noch interessanter zu machen, indem wir etwas Randomisierung in die Art und Weise einfügen, wie der Ball vom Paddle abprallt.