俄罗斯方块上的Java脚本键控制问题

时间:2019-03-11 23:25:27

标签: javascript tetris

主要是移动键盘上的箭头时,我遇到了问题。如果视点足够小,则由于垂直边条和俄罗斯方块同时出现,因此它也会上下移动屏幕。而且我希望碎片仅在按箭头时才移动。我是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 :(得分:0)

所以这里的问题是它会单独感应每个键(我遇到了同样的问题,因此您需要一个键映射来跟踪所有按下的键,如下所示:

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
}

您可能还想使用适当的标识符“ ===”

答案 1 :(得分:0)

  • 移动浏览器窗口的箭头键是默认浏览器行为
    使用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%;}