最适合网络开发者的网站
图。初学者课程

尿素

游戏组件


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


添加组件

创建一个组件构造函数,它允许您将组件添加到游戏区域。

对象构造函数被称为 component,然后我们制作第一个组件,称为 myGamePiece:

例子

var myGamePiece;

函数开始游戏() {
我的游戏区域.开始();
  myGamePiece = 新组件(30,30,“红色”,10,120);
}

函数组件(宽度,高度,颜色,x,y){
这个.宽度=宽度;
这个.高度=高度;
这个.x = x;
这个.y = y;
ctx = 我的游戏区域.context;
ctx.填充样式 = 颜色;
ctx.fillRect(这个.x,这个.y,这个.width,这个.height);
}
亲自尝试 »

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


框架

为了让游戏可以正常运行,我们将以每秒 50 次的速度更新显示,这很像电影中的帧。

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

在里面 myGameArea 对象,添加一个间隔,它将运行updateGameArea() 每 20 毫秒执行一次函数(每秒 50 次)。还添加一个名为clear(),清除整个画布。

在里面 component 构造函数,添加一个名为update(),来处理组件的绘制。

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

结果是该组件每秒绘制和清除 50 次:

例子

var 我的游戏区域 = {
画布:document.createElement(“画布”),
开始:函数(){
这.画布.宽度 = 480;
这个.画布.高度 = 270;
这个.上下文 = 这个.画布.getContext(“2d”);
document.body.insertBefore(this.canvas, document.body.childNodes[0]);
这个.间隔 = 设置间隔 (updateGameArea, 20);
  },
清除:函数(){
这个.上下文.clearRect(0,0,这个.画布.宽度,这个.画布.高度);
  }
}

函数组件(宽度,高度,颜色,x,y){
这个.宽度=宽度;
这个.高度=高度;
这个.x = x;
这个.y = y;
this.update = 函数(){
ctx = 我的游戏区域.context;
ctx.填充样式 = 颜色;
ctx.fillRect(这个.x,这个.y,这个.width,这个.height);
  }
}

函数更新游戏区域(){
我的游戏区域.清除();
我的游戏部件.更新();
}
亲自尝试 »

让它动起来

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

例子

函数更新游戏区域(){
我的游戏区域.清除();
  我的游戏部件.x += 1;
 
我的游戏部件.更新();
}
亲自尝试 »

为什么要清除游戏区域?

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

例子

函数更新游戏区域(){
// 我的游戏区域.clear();
  我的游戏部件.x += 1;
 
我的游戏部件.更新();
}
亲自尝试 »

更改尺寸

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

例子

创建一个 10x140 像素的矩形:

函数开始游戏() {
我的游戏区域.开始();
myGamePiece = 新组件(140, 10, "红色", 10, 120);
}
亲自尝试 »

改变颜色

您可以控制组件的颜色:

例子

函数开始游戏() {
我的游戏区域.开始();
myGamePiece = 新组件(30,30, “蓝色的”, 10, 120);
}
亲自尝试 »

您还可以使用其他颜色值,如 hex、rgb 或 rgba:

例子

函数开始游戏() {
我的游戏区域.开始();
myGamePiece = 新组件(30,30, “RGBA(0,0,255,0.5)”, 10, 120);
}
亲自尝试 »

改变位置

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

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

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

X

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

例子

函数开始游戏() {
我的游戏区域.开始();
myGamePiece = 新组件(30,30,“红色”, 2, 2);
}
亲自尝试 »

许多组件

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

例子

var 红色GamePiece,蓝色GamePiece,黄色GamePiece;

函数开始游戏() {
redGamePiece = 新组件(75,75,“红色”,10,10);
yellowGamePiece = 新组件(75,75,“黄色”,50,60);
blueGamePiece = 新组件(75,75,“蓝色”,10,110);
 
我的游戏区域.开始();
}

函数更新游戏区域(){
我的游戏区域.清除();
红色游戏部件.更新();
yellowGamePiece.更新();
blueGamePiece.更新();
}
亲自尝试 »

移动组件

使所有三个组件朝不同的方向移动:

例子

函数更新游戏区域(){
我的游戏区域.清除();
红色游戏件.x += 1;
yellowGamePiece.x += 1;
yellowGamePiece.y += 1;
blueGamePiece.x += 1;
blueGamePiece.y -= 1;
红色游戏部件.更新();
yellowGamePiece.更新();
blueGamePiece.更新();
}
亲自尝试 »