按下第二个键后,字符停止

时间:2015-12-07 15:24:57

标签: javascript canvas keyboard

我正在从箭头键输入输入并相应地在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;
}

此外,我正在从onkeydownonkeyup事件中获取输入,并将它们存储在名为Keys的对象中。 (例如Keys[e.keyCode] = true ) 按下该键时,该键的布尔值为true。解除它是错误的。

1 个答案:

答案 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。)