0

40x40px の正方形とそれらの間に 4px のギャップがある 5x5 グリッドを作成したいのですが、ここに写真があります:

http://i.stack.imgur.com/hu96a.png

だから私はこのようなことをするつもりでした:

$(document).ready(function(){
    var ctx = document.getElementById('grid').getContext('2d');
    for (var y = 0; y < 5; y++) {
        for (var x = 0; x < 5; x++) {
            ctx.fillStyle = "rgb(200,0,0)";
            ctx.fillRect ((40*y)+4*(y+1),(40*x)+4*(x+1),40*(y+1)+4*(y+1),40*(x+1)+4*(x+1));
        };
    };
});

しかし、うまくいきませんでした。もっと簡単な方法があると思いますが、方法がわかりません! どうすれば望ましい結果を得ることができますか?

ありがとう!

4

1 に答える 1

3

フィドルを参照してください

そしてコード:

$(document).ready(function(){
    var ctx = document.getElementById('grid').getContext('2d');
    ctx.fillStyle = "rgb(200,0,0)";
    ctx.beginPath();    
    for (var x = 0, i = 0; i < 5; x+=44, i++) {
        for (var y = 0, j = 0; j < 5; y+=44, j++) {            
            ctx.rect (x, y, 40, 40);
        }
    }
    ctx.fill();
    ctx.closePath();
});

別の方法:

$(document).ready(function(){
    var ctx = document.getElementById('grid').getContext('2d');
    ctx.fillStyle = "rgb(200,0,0)";    
    for (var x = 0, i = 0; i < 5; x+=44, i++) {
        for (var y = 0, j = 0; j < 5; y+=44, j++) {            
            ctx.fillRect (x, y, 40, 40);
        }
    }
});

どちらの場合も、キャンバスのステート マシンの変更によって描画プロセスが遅くなるため、パフォーマンスを向上させるためにブロックから削除ctx.fillStyleしました。for

編集

コメントでmarkEが指摘しているように、次のアプローチも使用できます。

$(document).ready(function(){
    var ctx = document.getElementById('grid').getContext('2d');
    var size = 40;
    var offset = 4;

    ctx.fillStyle = "rgb(200,0,0)";
    for (var x = 0; x < 5; x++) {
        for (var y = 0; y < 5; y++) {            
            ctx.fillRect (x*(size+offset), y*(size+offset), size, size);
        }
    }
});

あとは個人のスタイリング次第!

于 2013-05-24T03:01:48.527 に答える