var canvas = document.getElementById('gameCanvas');
var ctx = canvas.getContext('2d');
var xPosition = 0;
var yPosition = 0;
var frameLength = 20;
function gameLoop(){
gameUpdate();
setTimeout(function(){gameLoop()}, frameLength);
}
function gameUpdate(){
ctx.clearRect(0, 0, 480, 640);
window.addEventListener('keydown', function(event){switch(event.keyCode){case 38: yPosition -= 1; break; case 40: yPosition += 1; break;}}, false);
ctx.fillRect(xPosition, yPosition, 50, 50);
}
$(document).ready(function() {
gameLoop();
});
我想通過箭頭鍵在畫布中移動矩形。 X和Y位置是變量xPosition和yPosition。目前嚴格按照Y方向處理,我有一個由「keydown」的eventlistener觸發的開關功能。例如,當按下向下箭頭鍵時,它將增加fillRect(X, Y, originX, OriginY)
中的Y值。這將更改全局變量,然後在畫布上繪製具有新座標的新矩形。 GameLoop重置,沖洗重複。這就是我理解它的原理。爲什麼var yPosition在每個循環後增加,儘管沒有發生事件?
因爲某些原因,即使我什麼都不做,腳本運行的時間越長,按下UP或DOWN鍵時,「更遠的」方塊跳動。也就是說,按下按鈕會從畫布上啓動很多由setTimeout循環數決定的像素,但它會出現。爲什麼是這樣的,我該如何解決它?
每次通過循環時都不需要添加事件偵聽器。在$(document).ready上執行它,你會沒事的。 – ericjbasti
它被稱爲**添加** EventListener的原因 - 它不會刪除以前添加的事件監聽器! – Pointy
您不需要將'gameLoop'包裝到'function'中,只需編寫'setTimeout(gameLoop,frameLength);' –