1

我在检测多个按键时遇到问题。我对 js/JQuery 有点陌生,所以这可能是一些愚蠢的错误......但我找不到它。任何帮助,将不胜感激。

    //========== KEY LOGGING ==========
  var pressedKeys = [];      
// == KEYDOWN ==
$(document.body).keydown(function(e){
    pressedKeys[e.which] = true;
        //left    
    if(pressedKeys[37] = true)
        {
        x -= speed;
        }         
        //up    
    if(pressedKeys[38] = true)
        {
        y -= speed;
        }         
        //right    
    if(pressedKeys[39] = true)
        {
        x += speed;
        }          
        //down    
    if(pressedKeys[40] = true)
        {
        y += speed;
        }          
        //+    
    if(pressedKeys[107] = true)
        {
        speed += 1;
        }           
        //-
    if(pressedKeys[109] = true)
        {
        speed -= 1;
        } 
});

// == KEYUP ==    
$(document.body).keyup(function (e) {
     pressedKeys[e.which] = false;   
});

编辑:问题是,当按下任何键时,它会激活所有方向......我不知道为什么。

4

2 回答 2

0

将您的 if 语句从 更改if (this = that)if (this == that)。“=”符号实际上将变量设置为 true,即使在 if 语句中也是如此。只有“==”检查它是否评估为真。

于 2013-06-27T19:54:22.557 回答
0

我在这里看到的几件事:

您正在使用赋值运算符而不是相等运算符:)

所以会发生什么

if (x = true) { /* code always runs */ }; 

尝试

if (pressedKeys[i] === true) { };

=== 可以说比 == 更好,因为它不会进行任何自动转换。我相信 1 == true 将返回 true 但 1 === true 将返回 false

第二件事是您确定已加载 jquery 吗?也许把整个事情都包裹在 $(document).ready() 周围。请参阅下面的快速示例:

  //========== KEY LOGGING ==========
var pressedKeys = [];      
// == KEYDOWN ==

$(document).ready(function(event) {

    $(document.body).keydown(function(e){
        pressedKeys[e.which] = true;
            //left    
        if(pressedKeys[37] === true)
            {
            x -= speed;
            }         
            //up    
        if(pressedKeys[38] === true)
            {
            y -= speed;
            }         
            //right    
        if(pressedKeys[39] === true)
            {
            x += speed;
            }          
            //down    
        if(pressedKeys[40] === true)
            {
            y += speed;
            }          
            //+    
        if(pressedKeys[107] === true)
            {
            speed += 1;
            }           
            //-
        if(pressedKeys[109] === true)
            {
            speed -= 1;
            } 

        alert(speed);
    });

// == KEYUP ==    
    $(document.body).keyup(function (e) {
         pressedKeys[e.which] = false;   
    });
});

最后,如果 x 和 y 确实没有定义,或者速度没有定义但没有更多代码,你仍然会遇到错误,我无法确定你会遇到什么错误。

好的,希望这会有所帮助。

您可能还想查看IIFE,这样您就不会将这些 x 和 y 以及速度变量保留为全局变量

于 2013-06-27T20:00:10.767 回答