そこで、javascriptとcanvasを使用して砂のシミュレーションを作成しました。
私の最初のアプローチは、との価値でarray
満たされていました。各オブジェクトは砂粒を表しています。objects
x
y
この方法は大きなキャンバスで機能しましたが、約600グレイン後に速度が低下し始めました。
index
私の次のアプローチは、それぞれがまたはのいずれか0
である2次元行列でした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);
};