デフォルトでは、キャンバスの矩形は左から右に移動する必要があります。キーを押すと、下に動き始めます。上記のコードを使用してキャンバス:キーを押したときの不思議な動作
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
x = 0,
y = 0;
function draw(x_move, y_move) {
requestAnimationFrame(function() {
draw(x_move, y_move);
});
ctx.beginPath();
ctx.rect(x, y, 20, 20);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "#ffffff";
ctx.fill();
ctx.closePath();
x = x + x_move;
y = y + y_move;
}
draw(1, 0);
document.addEventListener('keydown', function(event) {
//console.log(event.keyCode);
if (event.keyCode == 40) {
draw(0, 1);
}
});
canvas { background-color: red; }
<canvas id="canvas" width="600" height="400"></canvas>
、あなたは少なくとも通知は二つの問題があります下キーを押すと
- 、矩形は下に移動だけでなく、右に動き続けます。
- ダウンキーを何度も押し続けると、速度が上がります。
これらの問題を解決するにはどうすればよいですか?
のような関数の形で行動を含めることができるのkeydownとからkeyupイベントでキー状態オブジェクトを変更し、ドロー機能は、その状態キーオブジェクトの状態を確認しています。あなたのコード内でdraw()を何度も呼び出さないでください。 – Chris