Spelafbeeldingen
Druk op de knoppen om de smiley te verplaatsen:
Hoe afbeeldingen te gebruiken?
Om afbeeldingen aan een canvas toe te voegen, heeft het object getContext("2d") ingebouwde afbeeldingseigenschappen en methoden.
In onze game, om het gamepiece als een afbeelding te maken, gebruik je de componentconstructor, maar in plaats van naar een kleur te verwijzen, moet je naar de url van de afbeelding verwijzen. En u moet de constructor vertellen dat dit onderdeel van het type "image" is:
Voorbeeld
function startGame() {
myGamePiece = new component(30, 30, "smiley.gif", 10, 120, "image");
myGameArea.start();
}
In de componentconstructor testen we of de component van het type "image" is en maken een image-object door de ingebouwde "new Image()"-objectconstructor te gebruiken. Wanneer we klaar zijn om de afbeelding te tekenen, gebruiken we de methode drawImage in plaats van de fillRect-methode:
Voorbeeld
function component(width, height, color, x, y, type) {
this.type = type;
if (type == "image") {
this.image = new Image();
this.image.src = color;
}
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 (type == "image") {
ctx.drawImage(this.image,
this.x,
this.y,
this.width, this.height);
} else {
ctx.fillStyle = color;
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
}
Afbeeldingen wijzigen
U kunt de afbeelding op elk gewenst moment wijzigen door de src
eigenschap van het image
object van uw component te wijzigen.
Als je de smiley elke keer dat deze beweegt wilt veranderen, verander dan de afbeeldingsbron wanneer de gebruiker op een knop klikt, en weer normaal wanneer de knop niet wordt geklikt:
Voorbeeld
function move(dir) {
myGamePiece.image.src = "angry.gif";
if (dir == "up") {myGamePiece.speedY = -1; }
if (dir == "down") {myGamePiece.speedY = 1; }
if (dir == "left") {myGamePiece.speedX = -1; }
if (dir == "right") {myGamePiece.speedX = 1; }
}
function clearmove() {
myGamePiece.image.src = "smiley.gif";
myGamePiece.speedX = 0;
myGamePiece.speedY = 0;
}
Achtergrondafbeeldingen
Voeg een achtergrondafbeelding toe aan je gamegebied door deze als onderdeel toe te voegen en werk ook de achtergrond in elk frame bij:
Voorbeeld
var myGamePiece;
var myBackground;
function startGame() {
myGamePiece = new component(30, 30, "smiley.gif", 10, 120, "image");
myBackground = new component(656, 270, "citymarket.jpg", 0, 0, "image");
myGameArea.start();
}
function updateGameArea() {
myGameArea.clear();
myBackground.newPos();
myBackground.update();
myGamePiece.newPos();
myGamePiece.update();
}
Achtergrond verplaatsen
Wijzig de speedX
eigenschap van de achtergrondcomponent om de achtergrond te laten bewegen:
Voorbeeld
function updateGameArea() {
myGameArea.clear();
myBackground.speedX = -1;
myBackground.newPos();
myBackground.update();
myGamePiece.newPos();
myGamePiece.update();
}
Achtergrondlus
Om voor altijd dezelfde achtergrondlus te maken, moeten we een specifieke techniek gebruiken.
Begin door de componentconstructeur te vertellen dat dit een achtergrond is . De componentconstructor voegt de afbeelding vervolgens twee keer toe, waarbij de tweede afbeelding direct na de eerste afbeelding wordt geplaatst.
Controleer in de newPos()
methode of de x
positie van het onderdeel het einde van de afbeelding heeft bereikt, zo ja, stel de x
positie van het onderdeel in op 0:
Voorbeeld
function component(width, height, color, x, y, type) {
this.type = type;
if (type == "image" || type == "background") {
this.image = new Image();
this.image.src = color;
}
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 (type == "image" || type == "background") {
ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
if (type == "background") {
ctx.drawImage(this.image, this.x + this.width, this.y, this.width, this.height);
}
} else {
ctx.fillStyle = color;
ctx.fillRect(this.x, this.y, this.width, this.height);
}
}
this.newPos = function() {
this.x += this.speedX;
this.y += this.speedY;
if (this.type == "background") {
if (this.x == -(this.width)) {
this.x = 0;
}
}
}
}