Spelscore
Druk op de knoppen om het rode vierkant te verplaatsen:
Tel de score
Er zijn veel manieren om de score in een spel bij te houden, we laten je zien hoe je een score op het canvas schrijft.
Maak eerst een scorecomponent:
Voorbeeld
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();
}
De syntaxis voor het schrijven van tekst op een canvaselement verschilt van het tekenen van een rechthoek. Daarom moeten we de componentconstructor aanroepen met een extra argument, waarmee we de constructor vertellen dat deze component van het type "text" is.
In de componentconstructor testen we of de component van het type "tekst" is en gebruiken de
fillText
methode in plaats van de fillRect
methode:
Voorbeeld
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);
}
}
...
}
Eindelijk voegen we wat code toe in de updateGameArea-functie die de score op het canvas schrijft. We gebruiken de frameNo
eigenschap om de score te tellen:
Voorbeeld
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();
}