Gli ultimi tutorial di sviluppo web
 

Immagini di gioco HTML


Premere i pulsanti per spostare il smiley:








Come utilizzare immagini?

Per aggiungere le immagini su una tela, il getContext("2d") oggetto è dotato di proprietà e metodi di immagine.

Nel nostro gioco, per creare la gamepiece come immagine, utilizzare il costruttore componente, ma invece di fare riferimento a un colore, è necessario fare riferimento alla URL dell'immagine. E si deve dire al costruttore che questo componente è di tipo "image" :

Esempio

function startGame() {
  myGamePiece = new component(30, 30, "smiley.gif" , 10, 120, "image" );
  myGameArea.start();
}

Nel costruttore componente testiamo se il componente è di tipo "image" , e creare un oggetto immagine utilizzando il built-in "nuova Image() " costruttore dell'oggetto. Quando siamo pronti per disegnare l'immagine, usiamo il metodo drawImage anziché il metodo fillRect:

Esempio

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);
    }
  }
}
Prova tu stesso "

Modificare Immagini

È possibile cambiare l'immagine in qualsiasi momento modificando la src proprietà della image oggetto del componente.

Se si desidera modificare il ogni smiley si muove, cambia la fonte dell'immagine quando l'utente fa clic su un pulsante, e tornare alla normalità quando il pulsante non si fa clic:

Esempio

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;
}
Prova tu stesso "

immagini di sfondo

Aggiungere un'immagine di sfondo per l'area di gioco con l'aggiunta di esso come un componente, e aggiornare anche lo sfondo in ogni fotogramma:

Esempio

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();
}
Prova tu stesso "

sfondo in movimento

Modificare il componente di fondo speedX proprietà per fare la mossa di fondo:

Esempio

function updateGameArea() {
    myGameArea.clear();
    myBackground.speedX = -1;
    myBackground.newPos();
    myBackground.update();
    myGamePiece.newPos();
    myGamePiece.update();
}
Prova tu stesso "

Background loop

Per rendere lo stesso loop sfondo per sempre, dobbiamo usare una tecnica specifica.

Inizia raccontando il costruttore componente che si tratta di uno sfondo. Il costruttore componente quindi aggiungere l'immagine due volte, posizionando la seconda immagine immediatamente dopo la prima immagine.

Nelle newPos() metodo, controlla se la x posizione del componente è raggiungere la fine dell'immagine, se ha, impostare la x posizione del componente a 0:

Esempio

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;
            }
        }
    }
}
Prova tu stesso "