菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

游戏组件


在游戏区域添加一个红色方块


添加组件

创建一个组件构造函数,用于将组件添加到游戏区域。

对象构造函数名为 component,我们创建第一个组件,名为 myGamePiece

示例

var myGamePiece;

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

function component(width, height, color, x, y) {
  this.width = width;
  this.height = height;
  this.x = x;
  this.y = y;
  ctx = myGameArea.context;
  ctx.fillStyle = color;
  ctx.fillRect(this.x, this.y, this.width, this.height);
}

自己动手试一试 »

组件具有控制其外观和移动的属性和方法。



为了让游戏准备就绪,我们将每秒更新显示 50 次,这非常类似于电影中的帧。

首先,创建一个名为 updateGameArea() 的新函数。

myGameArea 对象中,添加一个间隔,每 20 毫秒(每秒 50 次)运行一次 updateGameArea() 函数。同时添加一个名为 clear() 的函数,该函数清除整个画布。

component 构造函数中,添加一个名为 update() 的函数,用于处理组件的绘制。

updateGameArea() 函数调用 clear()update() 方法。

结果是组件每秒被绘制和清除 50 次。

示例

var myGameArea = {
  canvas : document.createElement("canvas"),
  start : function() {
    this.canvas.width = 480;
    this.canvas.height = 270;
    this.context = this.canvas.getContext("2d");
    document.body.insertBefore(this.canvas, document.body.childNodes[0]);
    this.interval = setInterval(updateGameArea, 20);
  },
  clear : function() {
    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
  }
}

function component(width, height, color, x, y) {
  this.width = width;
  this.height = height;
  this.x = x;
  this.y = y;
  this.update = function(){
    ctx = myGameArea.context;
    ctx.fillStyle = color;
    ctx.fillRect(this.x, this.y, this.width, this.height);
  }
}

function updateGameArea() {
  myGameArea.clear();
  myGamePiece.update();
}
自己动手试一试 »

移动它

为了证明红色方块每秒被绘制 50 次,我们将在每次更新游戏区域时将 x 位置(水平)更改一个像素。

示例

function updateGameArea() {
  myGameArea.clear();
  myGamePiece.x += 1;
 
myGamePiece.update();
}
自己动手试一试 »

为什么要清除游戏区域?

在每次更新时清除游戏区域似乎没有必要。然而,如果我们省略 clear() 方法,组件的所有移动都会留下它在上一个帧中位置的痕迹。

示例

function updateGameArea() {
  // myGameArea.clear();
  myGamePiece.x += 1;
 
myGamePiece.update();
}
自己动手试一试 »

改变大小

您可以控制组件的宽度和高度。

示例

创建一个 10x140 像素的矩形

function startGame() {
  myGameArea.start();
  myGamePiece = new component(140, 10, "red", 10, 120);
}
自己动手试一试 »

改变颜色

您可以控制组件的颜色。

示例

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "blue", 10, 120);
}
自己动手试一试 »

您还可以使用其他颜色值,如十六进制、rgb 或 rgba。

示例

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "rgba(0, 0, 255, 0.5)", 10, 120);
}
自己动手试一试 »

改变位置

我们使用 x 和 y 坐标将组件定位在游戏区域上。

画布的左上角坐标为 (0,0)。

将鼠标悬停在下面的游戏区域上,查看其 x 和 y 坐标。

X
Y

您可以将组件放置在游戏区域的任何您喜欢的位置。

示例

function startGame() {
  myGameArea.start();
  myGamePiece = new component(30, 30, "red", 2, 2);
}
自己动手试一试 »

多个组件

您可以在游戏区域放置任意数量的组件。

示例

var redGamePiece, blueGamePiece, yellowGamePiece;

function startGame() {
  redGamePiece = new component(75, 75, "red", 10, 10);
  yellowGamePiece = new component(75, 75, "yellow", 50, 60);
  blueGamePiece = new component(75, 75, "blue", 10, 110);
 
myGameArea.start();
}

function updateGameArea() {
  myGameArea.clear();
  redGamePiece.update();
  yellowGamePiece.update();
  blueGamePiece.update();
}
自己动手试一试 »

移动组件

让所有三个组件朝不同方向移动。

示例

function updateGameArea() {
  myGameArea.clear();
  redGamePiece.x += 1;
  yellowGamePiece.x += 1;
  yellowGamePiece.y += 1;
  blueGamePiece.x += 1;
  blueGamePiece.y -= 1;
  redGamePiece.update();
  yellowGamePiece.update();
  blueGamePiece.update();
}
自己动手试一试 »

×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持