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