Speletjie beelde
Druk die knoppies om die smiley te beweeg:
Hoe om beelde te gebruik?
Om beelde op 'n doek by te voeg, het die getContext ("2d") voorwerp ingeboude beeldeienskappe en -metodes.
In ons speletjie, om die speletjie as 'n prent te skep, gebruik die komponentkonstruktor, maar in plaas daarvan om na 'n kleur te verwys, moet jy na die url van die prent verwys. En jy moet vir die konstruktor vertel dat hierdie komponent van die tipe "beeld" is:
Voorbeeld
function startGame() {
myGamePiece = new component(30, 30, "smiley.gif", 10, 120, "image");
myGameArea.start();
}
In die komponentkonstruktor toets ons of die komponent van die tipe "beeld" is, en skep 'n beeldobjek deur die ingeboude "new Image()"-objekkonstruktor te gebruik. Wanneer ons gereed is om die prent te teken, gebruik ons die drawImage-metode in plaas van die fillRect-metode:
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);
}
}
}
Verander prente
Jy kan die beeld verander wanneer jy wil deur die src
eienskap van die image
voorwerp van jou komponent te verander.
As jy die smiley wil verander elke keer as dit beweeg, verander die beeldbron wanneer die gebruiker 'n knoppie klik, en terug na normaal wanneer die knoppie nie geklik word nie:
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;
}
Agtergrond beelde
Voeg 'n agtergrondprent by jou speletjie area deur dit as 'n komponent by te voeg, en werk ook die agtergrond in elke raam op:
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();
}
Bewegende agtergrond
Verander die agtergrondkomponent se speedX
eienskap om die agtergrond te laat beweeg:
Voorbeeld
function updateGameArea() {
myGameArea.clear();
myBackground.speedX = -1;
myBackground.newPos();
myBackground.update();
myGamePiece.newPos();
myGamePiece.update();
}
Agtergrond lus
Om vir altyd dieselfde agtergrondlus te maak, moet ons 'n spesifieke tegniek gebruik.
Begin deur vir die komponentkonstruktor te vertel dat dit 'n agtergrond is . Die komponentkonstruktor sal dan die prent twee keer byvoeg en die tweede prent onmiddellik na die eerste prent plaas.
Kyk in die newPos()
metode of die x
posisie van die komponent die einde van die prent bereik het, indien wel, stel die x
posisie van die komponent 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;
}
}
}
}