をクリアしていないことは、非常に単純な問題のように思えるし、私はちょうど何かを見下ろすが、このコードでなければなりません。キャンバスの背景
window.onresize = function(){
init.canvas.width = window.innerWidth;
init.canvas.height = window.innerHeight;
}
var init = {
canvas: new Object(),
ctx: new Object(),
constructCanvas: function(){
this.canvas = document.getElementById("canvas");
this.ctx = this.canvas.getContext("2d");
this.canvas.width = window.innerWidth;
this.canvas.height = window.innerHeight;
}
}
init.constructCanvas();
var a = 20;
var b = 20;
init.ctx.lineWidth = 4;
function loop(){
init.ctx.fillStyle = "Blue";
init.ctx.fillRect(0,0,init.canvas.width,init.canvas.height);
init.ctx.moveTo(a,b);
init.ctx.lineTo(a+=9,b);
init.ctx.stroke();
}
setInterval(loop,100);
起こっべきである何をするとき、次の私は、長さ9の小さな線分を取得していますコールが発生して、クリアする必要があり、別の線分を前の行の最後に置く必要がありますが、代わりに1つの長い行があり、fillRectの呼び出しが何もしないようです。
答えはあなたの問題を解決しますが、あなたは間違っているいくつかのものをやっています。ループ関数を呼び出すには 'requestAnimationFrame'を使います。 'canvas'と' ctx'プロパティのために 'init'でオブジェクトを作成することは冗長で、とにかくそれらを上書きします。 2つの行を 'constructCanvas'関数で作成するときに削除してください。また 'new Object()'は '{}'と同じです。 'window.setInterval'でwindowを使うのではなく、なぜ' innerWidth'、 'innerHeight'、' onresize'でwindowを使うのですか? 'window'は常にデフォルトスコープです。あなたがグローバル変数を強制しない限り、それを使う必要はありません。 – Blindman67