Итак, я нахожусь на самом начальном этапе создания своей первой платформенной игры на html5. Пока я реализовал только движение влево и вправо, и в игре нет «гравитации» или обнаружения столкновений.
Однако я уже столкнулся с проблемой.
Если вы идете влево или вправо в течение короткого периода времени, «персонаж» действует так, как задумано (я использую термин «персонаж» вольно, поскольку на самом деле движется карта). Однако, если вы удерживаете клавишу нажатой, карта перемещается слишком быстро.
Я полагаю, проблема в том, что прослушиватель событий keydown все время прослушивает, там для перемещения карта перемещается перед каждым тиком или кадром игры.
Итак, мой вопрос: как я могу заставить нажатие клавиши увеличивать смещение карты только на каждом тике игры (20 миллисекунд).
Вот мой JSFiddle: НАЖМИТЕ ЗДЕСЬ
document.addEventListener('keydown',function(event){
var dir = event.which;
if(dir == directions.LEFT){
mapOffsetX += mapOffsetDistanceX;
event.preventDefault();
};
if(dir == directions.RIGHT){
mapOffsetX -= mapOffsetDistanceX;
event.preventDefault();
};
});
document.addEventListener('keyup',function(event){
var dir = event.which;
if(dir == directions.LEFT){
mapOffsetX -= mapOffsetDistanceX;
};
if(dir == directions.RIGHT){
mapOffsetX += mapOffsetDistanceX;
};
});
initFloorObject(100,c.height/2,300,20,0,0,0,1);
var myInt = setInterval(function(){
clearScreen();
for(var i=0;i<floorObject.length;i++){
floorObject[i][0] = parseInt(floorObject[i][0])+mapOffsetX;
};
drawChar();
drawFloorObjects();
},20);