游戏图像
按下按钮移动笑脸
如何使用图像?
要在画布上添加图像,getContext("2d") 对象内置了图像属性和方法。
在我们的游戏中,要将游戏元素作为图像创建,请使用组件构造函数,但不要引用颜色,而是引用图像的 URL。 并且必须告诉构造函数此组件的类型为“图像”。
示例
function startGame() {
myGamePiece = new component(30, 30, "smiley.gif", 10, 120, "image");
myGameArea.start();
}
在组件构造函数中,我们测试组件是否为“图像”类型,并使用内置的“new Image()”对象构造函数创建图像对象。 当我们准备好绘制图像时,我们使用 drawImage 方法而不是 fillRect 方法。
示例
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);
}
}
}
自己试试 »
更改图像
您可以随时通过更改组件的image
对象的 src
属性来更改图像。
如果您想在笑脸每次移动时更改笑脸,请在用户单击按钮时更改图像源,并在未单击按钮时恢复正常。
示例
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;
}
自己试试 »
背景图像
通过将背景图像添加为组件,并将背景在每一帧中更新,将背景图像添加到游戏区域。
示例
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();
}
自己试试 »
移动背景
更改背景组件的 speedX
属性以使背景移动
示例
function updateGameArea() {
myGameArea.clear();
myBackground.speedX = -1;
myBackground.newPos();
myBackground.update();
myGamePiece.newPos();
myGamePiece.update();
}
自己试试 »
背景循环
为了使相同的背景永远循环,我们必须使用一种特定的技术。
首先告诉组件构造函数这是一个背景。 组件构造函数将添加两次图像,并将第二个图像放置在第一个图像之后。
在 newPos()
方法中,检查组件的 x
位置是否已达到图像的末尾,如果已达到,则将组件的 x
位置设置为 0。
示例
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;
}
}
}
}
自己试试 »