我正在从箭头键输入输入并相应地在JavaScript中的2D画布游戏中移动角色。
当我按下两个键时,我想要特别的事情发生,比如对角线移动和停止。
这些特殊的事情确实发生了,但是当我抬起按下的第二把钥匙时出现了一个小故障:我的角色停止移动。但是,如果我按下第一个按键并按下第二个按键,则不会发生这种情况。在那种情况下,我的角色继续朝这个方向发展。为什么会这样?
以下是该功能的摘录:
//both up and down keys pressed, character should stop
if(Keys.up && Keys.down){
character.y -= 10;
character.y += 10;
}
else if(Keys.down){
character.y += 10;
}
else if(Keys.up){
character.y -= 10;
}
此外,我正在从onkeydown
和onkeyup
事件中获取输入,并将它们存储在名为Keys的对象中。 (例如Keys[e.keyCode] = true )
按下该键时,该键的布尔值为true。解除它是错误的。
答案 0 :(得分:0)
要移动对角线,你需要一个x分量,而不仅仅是Y.所以你需要一个x和y的监听器。
另外,为此,为什么不这样做(而不是迫使客户无缘无故地进行计算):
if(Keys.up && Keys.down){
return;
}
另外,当你添加X组件时,不要使用"否则如果" - 只需使用"如果"因为你希望能够一次捕获多个输入以对角移动。
应该看起来像:
if(Keys.up && Keys.down){
return;
}
if(Keys.down){
character.y += 10;
}
if(Keys.up){
character.y -= 10;
}
if(Keys.left){
character.x -= 10;
}
if(Keys.right){
character.x += 10;
}
您还可以使用CSS动画进行插值以在位置之间移动,以使移动更平滑(并且每按一次按钮不会跳过10px。)