Spielbilder
Drücken Sie die Tasten, um den Smiley zu bewegen:
Wie verwende ich Bilder?
Um Bilder auf einer Leinwand hinzuzufügen, verfügt das getContext("2d")-Objekt über integrierte Bildeigenschaften und -methoden.
Um in unserem Spiel das Gamepiece als Bild zu erstellen, verwenden Sie den Komponentenkonstruktor, aber anstatt auf eine Farbe zu verweisen, müssen Sie auf die URL des Bildes verweisen. Und Sie müssen dem Konstruktor mitteilen, dass diese Komponente vom Typ "image" ist:
Beispiel
function startGame() {
myGamePiece = new component(30, 30, "smiley.gif", 10, 120, "image");
myGameArea.start();
}
Im Komponentenkonstruktor testen wir, ob die Komponente vom Typ "Bild" ist, und erstellen ein Bildobjekt, indem wir den eingebauten "new Image()"-Objektkonstruktor verwenden. Wenn wir bereit sind, das Bild zu zeichnen, verwenden wir die Methode drawImage anstelle der Methode fillRect:
Beispiel
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);
}
}
}
Bilder ändern
Sie können das Bild jederzeit ändern, indem Sie die src
Eigenschaft des image
Objekts Ihrer Komponente ändern.
Wenn Sie den Smiley jedes Mal ändern möchten, wenn er sich bewegt, ändern Sie die Bildquelle, wenn der Benutzer auf eine Schaltfläche klickt, und kehren Sie zum Normalzustand zurück, wenn die Schaltfläche nicht angeklickt wird:
Beispiel
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;
}
Hintergrundbilder
Fügen Sie Ihrem Spielbereich ein Hintergrundbild hinzu, indem Sie es als Komponente hinzufügen, und aktualisieren Sie auch den Hintergrund in jedem Frame:
Beispiel
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();
}
Bewegter Hintergrund
Ändern Sie die speedX
Eigenschaft der Hintergrundkomponente, damit sich der Hintergrund bewegt:
Beispiel
function updateGameArea() {
myGameArea.clear();
myBackground.speedX = -1;
myBackground.newPos();
myBackground.update();
myGamePiece.newPos();
myGamePiece.update();
}
Hintergrundschleife
Um für immer dieselbe Hintergrundschleife zu erstellen, müssen wir eine bestimmte Technik verwenden.
Beginnen Sie damit, dem Komponentenkonstruktor mitzuteilen, dass dies ein Hintergrund ist . Der Komponentenkonstruktor fügt das Bild dann zweimal hinzu und platziert das zweite Bild direkt hinter dem ersten Bild.
Überprüfen Sie in der newPos()
Methode, ob die x
Position der Komponente das Ende des Bildes erreicht hat. Wenn dies der Fall ist, setzen Sie die x
Position der Komponente auf 0:
Beispiel
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;
}
}
}
}