пытаюсь сделать html страницу с
event.keyCode
написал такой скрипт :
document.addEventListener('keydown', eventT, false);
function eventT(event) {
switch (event.keyCode) {
case 38:
console.log('вперед');
break;
case 40:
console.log('назад');
break;
case 37:
console.log('лево');
break;
case 39:
console.log('право');
break;
}
}
здесь все работает но как можно сделать движение нискосоком добавил такой скрипт но не сработало
if (event.keyCode == 37 && event.keyCode == 38) {
console.log('найскосок NUM7')
} else
if (event.keyCode == 38 && event.keyCode == 39) {
console.log('найскосок NUM9')
}
и столкнулся с еще одной проблемой когда нажимаешь стрелку верх и на стрелку налево стрелка верх прерывается можно ли этого избежать?
Control Panel
Ответ
Чтобы обрабатывать одновременное нажатие клавиш, надо нажатия записывать отдельно, а обрабатывать - отдельно. Попробуйте:
const keys = [];
document.onkeydown = e => {
if(keys.indexOf(e.which)<0) keys.push(e.which);
};
document.onkeyup = e => {
keys.splice(keys.indexOf(e.which),1);
};
setInterval(() => {
keys.forEach(item => {
switch(item){
case 87:case 38://W
console.log('вперед');
break;
case 68:case 39://D
console.log('вправо');
break;
case 65:case 37://A
console.log('влево');
break;
case 83:case 40://S
console.log('назад');
break;
default:
//console.log(item);
}
});
// Наискосоки:
if (keys.includes(37) && keys.includes(38)) {
console.log('найскосок NUM7')
}
if (keys.includes(38) && keys.includes(39)) {
console.log('найскосок NUM9')
}
if (keys.includes(39) && keys.includes(40)) {
console.log('найскосок NUM3')
}
if (keys.includes(37) && keys.includes(40)) {
console.log('найскосок NUM1')
}
}, 111);
Комментариев нет:
Отправить комментарий