У меня простая концепция. Когда игрок нажимает W, A, S или D, изображение на холсте движется соответственно. Однако это приводит к очень прерывистой анимации, и я не уверен, почему (хотя я думаю, что это как-то связано с моими слушателями событий). Ниже мой код.HTML5/Javascript - My user-triggered canvas animation choppy
var playerXPos = 10;
var playerYPos = 10;
var playerImg = new Image();
playerImg.src = "knight.png";
function mainGameLoop(){
window.requestAnimationFrame(mainGameLoop);
c = document.getElementById("gameCanvas").getContext("2d");
c.clearRect(0,0,1000,500);
c.drawImage(playerImg,playerXPos,playerYPos);
}
window.requestAnimationFrame(mainGameLoop);
window.addEventListener("keydown", onKeyDown, false);
window.addEventListener("keyup", onKeyUp, false);
window.addEventListener("keypress", onKeyPress, false);
function onKeyDown(e){
var keyCode = e.keyCode;
switch(keyCode){
case 87: //w
onKeyW();
break;
case 65: //a
onKeyA();
break;
case 83: //s
onKeyS();
break;
case 68: //d
onKeyD();
break;
}
function onKeyW(){
playerYPos -= 5;
}
function onKeyA(){
playerXPos -= 5;
}
function onKeyS(){
playerYPos += 5;
}
function onKeyD(){
playerXPos += 5;
}
Почему это делается? Любая помощь приветствуется!
EDIT: Как примечание стороны, я сделал это, прежде чем использовать булевы (когда кнопка ш нажата keyW
переменная становится истинным, а в mainGameLoop есть if(keyW == true){playerYPos -= 5;}
)
для одного вы, вероятно, хотите handleKeyboard() вне вашего игрового цикла. Этот метод нужно только один раз вызывать для регистрации обработчиков событий. –
Линии 'playerXPos + = 5;' могут вызывать некоторую изменчивость при перемещении изображения 5px за раз, что является довольно большим прыжком. –
Я изменил его на 1, и он по-прежнему очень неспокойный, просто медленнее – EpicPineapple