2013-06-27 6 views
1

다중 키 누름 감지에 문제가 있습니다. 나는 js/JQuery에 다소 익숙하다. 그래서 어리석은 실수 일 수있다. 그러나 나는 그것을 찾는다. 어떤 도움을 주시면 감사하겠습니다.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; 
}); 

EDIT : 문제는 키를 누르면 모든 방향이 활성화되고 그 이유는 알 수 없습니다.

+0

글로벌 Y와 속도 변수를 떠나 지마 IIFE보고 할 수 있습니다. 일부 브라우저는 e.keyCode를 사용합니다. –

+0

@Samual은 나를 위해, 적어도 내가 swicth를 사용할 때 작동했습니다. 문제는 모든 화살표를 누르면 모든 방향이 활성화된다는 것입니다. –

+1

== (테스트) 대신 = (할당)을 사용하고 있기 때문일 수 있습니다. –

답변

0

몇 가지 내가 여기를 참조하십시오

대신 평등 연산자의 할당 연산자를 사용하는 :)

을 SO 무슨 일

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가 정말 정의되지 않은 경우 여전히 오류로 실행되거나 속도가 정의되지하지만 경우 더 많은 코드없이 내가 발생할 무슨 오류 확실히 말할 수 없습니다 아래에있는 내 빠른 예를 참조하십시오.

도움이 되셨을 바랍니다.

또한 그래서 당신이 x와 항상 작동하지 않습니다 e.which

0

if 문을 if (this = that)에서 if (this == that)으로 변경하십시오. "="기호는 실제로 if 문에서도 변수를 true로 설정합니다. "=="만이 사실로 평가되는지 확인합니다.

+0

맨, 고마워요! 방금 문제를 찾으려고 몇 시간을 구 했어요. Totaly는 이것에 대해 잊어 버렸습니다. c 나에 대한 수치심 –

+0

전에 많은 실수를 범했습니다. 실제로 'if (this = that)'를 수행하는 것이 때로는 유용 할 수 있습니다. 'this'에 'this'를 실제로 할당했는지 확인하기 위해 테스트 할 것이고, 어떻게 든 실패하면 false로 평가할 것입니다. 어쨌든, 명심해야 할 것이 있습니다. –