Picha ya Kijogo

Bonyeza butuni kufikia kushika msaada wa mwelezo:






Kutumia picha?

Kama unaonesha kuongeza picha kwenye kanvasi, tuma kufungua tabia za picha na vifaa vya objecti ya "getContext("2d")":

Kwenye kipindi chetu, kama unaonesha kufanya komponzi kama picha, tuma kufungua mfano wa komponzi, lakini wakati huo tunahitaji kurejea URL ya picha, hata tupu ya rangi. Kwa hivyo, tunahitaji kumtaarifu mfano wa komponzi kama "image":

mimba

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

Kwenye mfano wa komponzi, tunafikia ina kwenye aina "image", na tunafungua kiobjecti cha "new Image()" cha mfano wa kufungua tovuti ya picha. Kama tunapumzika kuandaa tovuti ya picha, tunatumia method ya drawImage hata method ya fillRect:

mimba

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);
    }
  }
}

Tafakari kwa Ushiriki

更改图像

您可以随时通过更改组件的 image 对象的 src 属性来更改图像。

如果您想在每次移动时更改笑脸,请在用户单击按钮时更改图像源,并在未单击按钮时恢复正常:

mimba

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;
}

Tafakari kwa Ushiriki

背景图片

通过将背景图像添加为组件,可将其添加到游戏区域,并在每个帧中更新背景:

mimba

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();
}

Tafakari kwa Ushiriki

移动背景

更改背景组件的 speedX 属性可使背景移动:

mimba

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

Tafakari kwa Ushiriki

Ugumu wa mgongo

Kuwa sababu inayofikia inayotokana na mabaki ya mabaki ya mgongo huu inayotokana na teknolojia ya kipekelewa.

Kwanza, tukifaa kumtaarifu kifaa cha ujenzi kwamba hii ni mgongo. Kifaa cha ujenzi cha komponenti kinakamilika picha mara mbili, kinakamilika picha ya pili kwa picha ya kwanza.

katika newPos() katika method, tukichukua kiweza kumekaa mwelekeo wa x wa komponenti kufikia mwisho wa picha, ikiwa ni kama hivi, tukichukua komponenti ya x Mwiliwe ukiwa 0:

mimba

function component(width, height, color, x, y, type) {
  this.type = type;
  ina (type == "image" aupe) 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;
    ina (type == "image" aupe type == "background") {
      ctx.drawImage(this.image, this.x, this.y, this.width, this.height);
      ina (type == "background") {
        ctx.drawImage(this.image, this.x + this.width, this.y, this.width, this.height);
      }
    }
      ctx.fillStyle = color;
      ctx.fillRect(this.x, this.y, this.width, this.height);
    }
  }
  this.newPos = function() {
    this.x += this.speedX;
    this.y += this.speedY;
    ina (this.type == "background") {
      if (this.x == -(this.width)) {
        this.x = 0;
      }
    }
  }
}

Tafakari kwa Ushiriki