自分が取り組んでいるゲームのアニメーションがありますが、繰り返されないようです。スペースバーを押すと、キャンバスの上部に円を「発射」するイベントがトリガーされます。問題は、キーをもう一度押すとアニメーションが開始されないことです。これが私が書いたサンプルコードです:
var canvas, ctx,
spaceKey = false,
upKey = false,
downKey = false,
canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
shotX = 150, shotY = 280;
function loop() {
if (spaceKey) shoot();
}
function keyDown(e) {
if (e.keyCode == 32) spaceKey = true;
}
function keyUp(e) {
if (e.keyCode == 32) spaceKey = false;
}
function shoot() {
setTimeout(function() { if (shotY > 0) {
ctx.clearRect(shotX-5,shotY-5,600,20);
ctx.beginPath();
ctx.arc(shotX, shotY,4,0,Math.PI * 2, false);
ctx.fillStyle = "yellow";
ctx.fill();
ctx.closePath();
shotY = shotY - 1;
shoot();
} else
ctx.clearRect(shotX-5,shotY-5,600,20);
}, 100);
}
(function init() {
setInterval(loop, 10);
document.addEventListener('keydown', keyDown, false);
document.addEventListener('keyup', keyUp, false);
})();
//init();
私が使用する理由はkeyUp
、keyDown
異なるキーを使用する他の関数があるためです。このコードは、この機能のみを表示するように変更されました。私が話していることをわかりやすくするために、JSFiddleを作成しました。私が持っている他の機能も同様に構造化されて機能しますが、唯一の違いは、その持続時間がキーを押すことによって直接制御されないことです。