javascript - 如何在游戏中添加多个 block

标签 javascript html canvas html5-canvas

我正在尝试制作一个简单的突破游戏,例如 this 。 我正在使用 HTML5 Canvas + JavaScript。

我的问题是我不知道如何(有效地)添加多个 block 。

我可以添加一个;但我无法在不更改此内容的情况下添加另一个:

var block = {
    width: 75,
    height: 20,
    x: 212,
    y: 0
};

ctx.fillRect(block.x, block.y, block.width, block.height);

对此:

var block2 = {
    width: 75,
    height: 20,
    x: 300,
    y: 0
};
ctx.fillRect(block2.x, block2.y, block2.width, block2.height);

一定有比手动创建新变量并使用 ctx.fillRect 更好的方法对于我游戏中的每个方 block 。如果有人能告诉我怎么做,我将不胜感激,谢谢!

请查看此 JSFiddle 以供引用:http://jsfiddle.net/3hEJJ/1/

最佳答案

您可以创建一个包含自更新方法的可实例化对象,而不是使用对象文字:

function Block(x, y, w, h) {
   this.x = x;
   this.y = y;
   this.width = w;
   this.height = h;
}

Block.prototype.update = function(ctx) {
   ctx.fillRect(this.x, this.y, this.width, this.height); 
};

现在您可以创建一堆对象:

var blocks = [];

for(var i = 0; i < 100; i++) {
    // get the x,y ... from somewhere, f.ex. another array
    blocks.push(new Block(x, y, w, h));
}

要更新,只需调用:

for(var i = 0; i < blocks.length; i++) {
    blocks[i].update(ctx);
}

关于javascript - 如何在游戏中添加多个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23953395/

相关文章:

jquery - 显示禁用元素的工具提示

javascript - 尝试从外部设置影子 DOM 的样式

javascript - 使用 Kineticjs 单击时将图像旋转到一定 Angular

c# - 如何在 Silverlight 中拉伸(stretch)控件以填充 Canvas?

javascript - pbkdf2 返回一个包含 128 个字符而不是 64 个字符的散列

javascript - javascript 对象属性的绑定(bind)

javascript - 在 Angular 2 中使用 CKEditor 的自定义配置文件

javascript - 如何创建动态对象 HTML 并分配给定的基于属性的数据

javascript - Firebase 与大型对象。关于值(value)变化是否仅传输(互联网带宽)增量变化?

javascript - Canvas 线性缩小