游戏组件
在游戏区域添加一个红色方块:
添加组件
创建一个组件构造函数,它允许您将组件添加到游戏区域。
对象构造函数被称为 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 位置(水平)改变一个像素:
为什么要清除游戏区域?
每次更新时清除游戏区域似乎没有必要。但是,如果我们忽略 clear()
方法,组件的所有移动都会留下它在上一帧的位置的轨迹:
更改尺寸
您可以控制组件的宽度和高度:
改变颜色
您可以控制组件的颜色:
您还可以使用其他颜色值,如 hex、rgb 或 rgba:
改变位置
我们使用 x 和 y 坐标将组件定位到游戏区域。
画布左上角的坐标为 (0,0)
将鼠标悬停在下面的游戏区域上以查看其 x 和 y 坐标:
X
是
您可以将组件放置在游戏区域的任何位置:
许多组件
您可以在游戏区域放置任意数量的组件:
例子
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.更新();
}
亲自尝试 »