Javascript 关于Java脚本密钥控制问题的俄罗斯方块
当我移动键盘上的箭头时,我遇到了一个问题。如果视点足够小,由于垂直侧栏和俄罗斯方块,它也会同时上下移动屏幕。我只希望当我按下箭头时碎片才会移动。我是Js的新手,我不知道从哪里开始解决问题,建议从哪里开始看 这是我的Js脚本Javascript 关于Java脚本密钥控制问题的俄罗斯方块,javascript,tetris,Javascript,Tetris,当我移动键盘上的箭头时,我遇到了一个问题。如果视点足够小,由于垂直侧栏和俄罗斯方块,它也会同时上下移动屏幕。我只希望当我按下箭头时碎片才会移动。我是Js的新手,我不知道从哪里开始解决问题,建议从哪里开始看 这是我的Js脚本 document.addEventListener("keydown", CONTROL); function CONTROL(event) { if (event.keyCode == 37) { p.moveLeft(); dro
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
}
您可能还需要使用正确的标识符“==”,因此这里的问题是,它会单独感应每个键(我也遇到过同样的问题,因此您需要一个键映射图来跟踪所有按下的键,如下所示:
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
}
您可能还希望使用正确的标识符“==”- 移动浏览器窗口的箭头键是默认的浏览器行为
使用event.preventDefault()
- 若要仅收听箭头键,请使用
if(k>=37&&k 40)return;
const p={//仅用于此演示。您使用Piece.prototype
moveLeft(){console.log(“LEFT”);},
rotate(){console.log(“rotate”);},
moveRight(){console.log(“RIGHT”);},
moveDown(){console.log(“DOWN”);},
};
文件。添加的监听器(“按键”,控制);
功能控制(事件){
const k=event.keyCode;
if(k<37 | | k>40)return;//如果不是箭头键,则不执行任何操作。否则执行:
event.preventDefault();//防止浏览器在箭头上滚动
if(k==37 | | k==39)dropStart=Date.now();//仅适用于左侧或右侧
返回{
第37页:左,
38:p,
39:p.moveRight,
40:p.moveDown
}[k] ();
}
html,正文{最小高度:100%;}
- 移动浏览器窗口的箭头键是默认的浏览器行为
使用event.preventDefault()
- 若要仅收听箭头键,请使用
if(k>=37&&k 40)return;
const p={//仅用于此演示。您使用Piece.prototype
moveLeft(){console.log(“LEFT”);},
rotate(){console.log(“rotate”);},
moveRight(){console.log(“RIGHT”);},
moveDown(){console.log(“DOWN”);},
};
文件。添加的监听器(“按键”,控制);
功能控制(事件){
const k=event.keyCode;
if(k<37 | | k>40)return;//如果不是箭头键,则不执行任何操作。否则执行:
event.preventDefault();//防止浏览器在箭头上滚动
if(k==37 | | k==39)dropStart=Date.now();//仅适用于左侧或右侧
返回{
第37页:左,
38:p,
39:p.moveRight,
40:p.moveDown
}[k] ();
}
html,body{min height:100%;}
09,欢迎使用SO!能否将您的代码简化为相关部分,以便潜在的响应者可以轻松看到您需要帮助或与问题相关的代码部分?谢谢!您可以调用event.preventDefault()
在控制
功能中,停止滚动屏幕的箭头键。如果用户不使用鼠标就无法移动屏幕,则可能会惹恼用户。(编辑以澄清-仅在if
语句中执行此操作-否则,任何键,包括F5之类的键,都不会按预期操作。)@SalmonKiller谢谢你的建议。@RobinZigmond看起来像是我想要的,现在看起来是一个很好的解决方案,但我会继续研究这个问题。谢谢你,欢迎这么做!你能不能把你的代码减少到只有相关的部分,这样潜在的响应者就可以很容易地看到你需要帮助的代码的哪些部分与问题相关?谢谢!您可以在控件函数中调用event.preventDefault()
来停止滚动屏幕的箭头键。如果用户不使用鼠标就无法移动屏幕,则可能会惹恼用户。(编辑以澄清-仅在if
语句中执行此操作-否则任何键(包括F5之类的键)都不会按预期执行。)@SalmonKiller谢谢你的建议。@RobinZigmond看起来像是我想要的,现在看起来是一个很好的解决方案,但我会继续研究这个问题。谢谢,我想我遗漏了你问题的一部分,如果你只想在按下箭头键时你的棋子移动,你需要禁用使你的棋子移动的时间功能对不起,我想我错过了你问题的一部分,如果你只想让你的作品在按下箭头键时移动,那么你需要禁用时间函数,它会使你的作品在你的脚本中下降到//movedown