HTML 游戏组件
-
定义和使用
在游戏区域上添加一个红色正方形: -
添加组件
创建一个组件构造函数,使您可以将组件添加到游戏区域。对象构造函数称为 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); }
组件具有控制其外观和移动的属性和方法。
-
Frames
为了让游戏准备好行动,我们将每秒更新显示 50 次,这很像电影中的帧。其结果是每秒绘制和清除构件 50 次:首先,创建一个名为 updateGameArea() 的新函数。在 myGameArea 对象中,添加一个间隔,该间隔将每隔20毫秒(每秒50次)运行 updateGameArea() 函数。还要添加一个名为 clear() 的函数,它将清除整个画布。在组件构造函数中,添加一个名为 update() 的函数来处理组件的绘图。updateGameArea() 函数调用 clear() 和 update() 方法。
尝试一下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倍的速度更新游戏的水平位置:
尝试一下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(10, 140, "red", 10, 120); }
-
-
改变位置
我们使用x和y坐标将组件定位到游戏区域。画布的左上角有坐标 (0,0)将鼠标悬停在下面的游戏区域上以查看其 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(); }