所以我用javascript和canvas创建了一个沙子模拟。
我的第一个方法是用一个和值array
填充。每个物体代表一粒沙子。objects
x
y
这种方法在大画布上有效,但在约 600 粒后开始放慢速度。
我的下一个方法是一个二维矩阵,其中每个index
都是0
或1
。它在200 x 200
画布上工作正常,但随着画布大小的增加,它变得太慢了。
..这是合理的,因为800 x 600
例如画布的长度为480k
.
所以我的问题是,如何优化这样的事情?
如果需要,这里有一些代码:
var draw = function() {
if (MOUSE_DOWN) { cast_grains(); }
for (var i = matrix.length; i > 0; i--) {
if (matrix[i] == "1") {
var x = i % canvas.width;
var y = Math.floor(i / canvas.width);
bfr.fillStyle = "#000";
bfr.fillRect(x, y, 1, 1);
/* ... movement calculation ... */
bfr.fillStyle = "rgb(255, 255, 200)";
bfr.fillRect(x, y, 1, 1);
}
}
ctx.drawImage(buffer, 0, 0);
};