由于 Canvas 是一个被动元素,因为您不知道它们是什么,所以您需要自己保存所有的像素。
为此,您可以创建包含重要信息的对象,例如区域和颜色。
例如(有无数种方法可以制作这些,但为了简单起见):
// ctx = context
function myObject(ctx, x, y, w, h, color) {
this.render = function() {
ctx.fillStyle = color;
ctx.fillRect(x, y, w, h);
}
this.setColor = function(newColor) {
color = newColor;
this.render();
}
this.setPosition = function(newX, newY) {
x = newX;
y = newY;
this.render();
}
//... etc. ...
}
现在您可以创建一个数组或堆栈来保存您的对象:
var stack = [];
当您按下按钮时:
var w = 50, h = 50, i = 0;
for(;i < 10; i++) {
var o = myObject(ctx, i * w - 2, 0, w, h);
stack.push(o);
o.render();
}
当你需要更新一个对象时,你只需调用它的setColor
函数:
//n = index, use a for-loop to update a range (group)
stack[n].setColor(newColor);
如果您需要组,则可以这样堆叠它们:
var group = [];
如上所述填充组,然后:
stack.push(group);
(并且您通过在对象上实现一个采用 ax 和 y 位置并与对象的位置和宽度/高度进行比较的方法来进行命中测试)。
为了提高内存效率,您可能需要prototype
一些方法(如果它们不需要访问内部变量等)。
希望有帮助。