俄罗斯方块 Java 脚本键控制问题
Tetris on Java Script key control problem
我在移动键控时遇到问题,主要是键盘上的箭头。如果视点足够小,它也会因为垂直侧边栏和俄罗斯方块同时上下移动屏幕。我希望只有当我按下箭头时,棋子才会移动。我是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);
}
}
所以这里的问题是它单独感应每个键(我遇到了同样的问题所以你需要一个键映射来跟踪所有按下的键,就像这样:
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
}
您可能还想使用正确的标识符“===”
- 箭头键移动浏览器 window 是 默认浏览器行为。
使用 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%;}
我在移动键控时遇到问题,主要是键盘上的箭头。如果视点足够小,它也会因为垂直侧边栏和俄罗斯方块同时上下移动屏幕。我希望只有当我按下箭头时,棋子才会移动。我是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);
}
}
所以这里的问题是它单独感应每个键(我遇到了同样的问题所以你需要一个键映射来跟踪所有按下的键,就像这样:
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
}
您可能还想使用正确的标识符“===”
- 箭头键移动浏览器 window 是 默认浏览器行为。
使用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%;}