Проблема управления ключами в Tetris на Java Script - PullRequest
1 голос
/ 12 марта 2019

У меня проблема при перемещении клавиш управления, в основном стрелок на клавиатуре. Если точка обзора достаточно мала, она также перемещает экран вверх и вниз из-за вертикальной боковой панели и части тетриса одновременно. И я хочу, чтобы кусочки двигались только тогда, когда я нажимаю стрелки. Я новичок в Js, и я не уверен, с чего начать, чтобы решить проблему, предложения, где начать смотреть?

Вот мой сценарий Js

document.addEventListener("keydown", CONTROL);

function CONTROL(event) {
    if (event.keyCode == 37) {
        p.moveLeft();
        dropStart = Date.now();
    }
    else if (event.keyCode == 38) {
        p.rotate();
    }
    else if (event.keyCode == 39) {
        p.moveRight();
        dropStart = Date.now();
    }
    else if (event.keyCode == 40) {
        p.moveDown(0);
    }
}

Ответы [ 2 ]

0 голосов
/ 12 марта 2019
  • Клавиши со стрелками, перемещающие окно браузера, - это поведение браузера по умолчанию .
    Используйте event.preventDefault()
  • Для прослушивания только клавиш со стрелками используйте if (k >= 37 && k <= 40) { или наоборот: if (k < 37 || k > 40) return;

const p = { // JUST FOR THIS DEMO. You use Piece.prototype
    moveLeft()  { console.log("LEFT"); },
    rotate()    { console.log("ROTATE"); },
    moveRight() { console.log("RIGHT"); },
    moveDown()  { console.log("DOWN"); },
};

document.addEventListener("keydown", CONTROL);

function CONTROL(event) {
  const k = event.keyCode;
  
  if (k < 37 || k > 40) return; // Do nothing if was not an arrow key. Else Do:
  
  event.preventDefault();       // Prevent browser scroll on arrows
  if(k == 37 || k == 39) dropStart = Date.now(); // Only for left or right

  return {
    37: p.moveLeft,
    38: p.rotate,
    39: p.moveRight,
    40: p.moveDown
  }[k]();
}
html, body {min-height: 100%;}
0 голосов
/ 12 марта 2019

, поэтому проблема в том, что он чувствует каждую клавишу отдельно (у меня была та же проблема, поэтому вам нужна таблица клавиш, чтобы отследить ВСЕ клавиши нажаты так:

var keys = [];

function keysPressed(e) {
  keys[e.keyCode] = true;

}

function keysReleased(e) {

keys[e.keyCode] = false;
 }

if(keys[37] === true){
//do stuff here
}
if(keys[38] === true){
//do stuff here
}

Выможет также захотеть использовать правильный идентификатор "==="

...