Spielstand
Drücke die Knöpfe, um das rote Quadrat zu bewegen:
Zählen Sie die Partitur
Es gibt viele Möglichkeiten, den Punktestand in einem Spiel festzuhalten. Wir zeigen Ihnen, wie Sie einen Punktestand auf die Leinwand schreiben.
Erstellen Sie zuerst eine Partiturkomponente:
Beispiel
var myGamePiece;
var myObstacles = [];
var myScore;
function startGame() {
myGamePiece = new component(30, 30, "red", 10, 160);
myScore = new component("30px", "Consolas", "black", 280, 40, "text");
myGameArea.start();
}
Die Syntax zum Schreiben von Text auf einem Canvas-Element unterscheidet sich vom Zeichnen eines Rechtecks. Daher müssen wir den Komponentenkonstruktor mit einem zusätzlichen Argument aufrufen, das dem Konstruktor mitteilt, dass diese Komponente vom Typ "Text" ist.
Im Komponentenkonstruktor testen wir, ob die Komponente vom Typ "Text" ist, und verwenden die
fillText
Methode anstelle der fillRect
Methode:
Beispiel
function component(width, height, color, x, y, type) {
this.type = type;
this.width = width;
this.height = height;
this.speedX = 0;
this.speedY = 0;
this.x = x;
this.y = y;
this.update = function() {
ctx = myGameArea.context;
if (this.type == "text") {
ctx.font = this.width + " " + this.height;
ctx.fillStyle = color;
ctx.fillText(this.text, this.x, this.y);
} else {
ctx.fillStyle = color;
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
...
}
Zuletzt fügen wir der updateGameArea-Funktion etwas Code hinzu, der die Punktzahl auf die Zeichenfläche schreibt. Wir verwenden die frameNo
Eigenschaft, um die Punktzahl zu zählen:
Beispiel
function updateGameArea() {
var x, height, gap, minHeight, maxHeight, minGap, maxGap;
for (i = 0; i < myObstacles.length; i += 1) {
if (myGamePiece.crashWith(myObstacles[i])) {
myGameArea.stop();
return;
}
}
myGameArea.clear();
myGameArea.frameNo += 1;
if (myGameArea.frameNo == 1 || everyinterval(150)) {
x = myGameArea.canvas.width;
minHeight = 20;
maxHeight = 200;
height = Math.floor(Math.random()*(maxHeight-minHeight+1)+minHeight);
minGap = 50;
maxGap = 200;
gap = Math.floor(Math.random()*(maxGap-minGap+1)+minGap);
myObstacles.push(new component(10, height, "green", x, 0));
myObstacles.push(new component(10, x - height - gap, "green", x, height + gap));
}
for (i = 0; i < myObstacles.length; i += 1) {
myObstacles[i].speedX = -1;
myObstacles[i].newPos();
myObstacles[i].update();
}
myScore.text = "SCORE: " + myGameArea.frameNo;
myScore.update();
myGamePiece.newPos();
myGamePiece.update();
}