我遇到多键按压检测的问题。我是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;
});
编辑:问题是,当按下任何键时,它会激活所有方向..我不知道为什么。
答案 0 :(得分:0)
将您的if语句从if (this = that)
更改为if (this == that)
。 “=”符号实际上将变量设置为true,即使在if语句中也是如此。只有“==”检查它是否评估为真。
答案 1 :(得分: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以及速度变量保留为全局