2016-11-14 1 views
-1
var keyState = []; 
    const KEY_UP = 38; 
    const KEY_DOWN = 40; 
    const KEY_W = 87; 
    const KEY_S = 83; 


const keyEventLogger = function (e) { keyState[e.keyCode] = e.type =='keydown';} 
window.addEventListener("keydown", keyEventLogger); 
window.addEventListener("keyup", keyEventLogger); 

위는 제가 인정할 수없는 코드입니다. 여기에있는 사용자가 플레이어의 움직임에 대해 묻는 사람에게 응답하여 게시했습니다. 대다수를 이해하는 동안 (나는 생각합니다), 특히 한 줄을 이해하지 못합니다. 에서가 내가 수집 무엇 :약간의 설명은 어긋나지 않을 것입니다 :-)

var keyState = []; 

생성하고 빈 배열이 키 상태라고

const KEY_UP = 38; 
const KEY_DOWN = 40; 
    const KEY_W = 87; 
    const KEY_S = 83; 

이는이 다음이다 그들은 키 코드는 특정 키

const keyEventLogger = function (e) { keyState[e.keyCode] = e.type =='keydown';} 

을 위해 무엇인지 정의 varibles 있습니다 나를 위해 혼란스러운 선. 그것은 keyeventlogger 라 불리는 변수를 만든 다음 그것을 통과하는 함수와 동일합니다. 그런 다음이 함수는 e의 키 코드를 배열에 추가하고 e.type (그게 무엇이든간에)과 같게 만들고 그 값을 아래의 이벤트 수신기 인 keydown으로 설정합니다. 누군가가 자바 스크립트에서

많은 제임스

+0

펜던트 :'const' 키워드는 정의가 아닌 상수를 정의합니다! –

+0

정말'var keyState = {}'이어야합니다. – Bergi

+0

아마도이 함수는 function keyEventLogger (e) {function isPressed = e.type == 'keydown'과 기능적으로 동일하다는 것을 알고있을 것입니다. keyState [e.keyCode] = isPressed; }'도움이 될까요? 또한'console.log (e)'를 추가하여 어떤 이벤트를 얻고 있는지 그리고 그 속성이 무엇인지 확인하십시오. – Bergi

답변

0

기능은 감사 최초의 클래스 객체 :-) 나에게 코드 줄을 설명하기 위해 최선을 다할 수 있습니다.

다른 값과 마찬가지로 변수, 상수 및 개체 속성에 할당 할 수 있습니다. 마찬가지로 다른 함수에 인수로 전달 될 수 있습니다.

0

e.type =='keydown'은 동등성 테스트입니다. 결과는 e.typekeydown과 같은지 여부에 따라 true 또는 false입니다. 이 값은 keyState 배열의 요소에 할당되는 부울 값입니다.

기본적으로 키보드의 키를 누르면 해당 키보드 문자에 해당하는 배열의 요소에 "true"가 할당됩니다. 키를 놓으면 요소는 false가됩니다. 게임 로직은 사용자가 인지 여부를 확인하기 위해 현재이 요소를 읽으며 현재 특정 방향으로 이동하려고 시도합니다.

+0

감사합니다. 내게 조금 비워 줘서 고마워 .-) –

+0

코드는 쉽게 작성 될 수 있습니다. 'window.addEventListener ("keydown", function (e) {keyState [e.keyCode] = true;}); window.addEventListener ("keyup", function (e) {keyState [e.keyCode] = false;}) ' –

+0

@ChrisWalsh 그러나 재미가없고 반복적으로 보입니다 :-) – Bergi

0

이것은 지금까지 눌러 진 모든 키와 현재 상태의 배열을 만듭니다. true 키를 누르면. 해당 키를 누르지 않으면 false.

0

const keyEventLogger = function (e) { keyState[e.keyCode] = e.type =='keydown';}

이 행 변수 keyEventLogger에 익명의 기능을 할당한다. 자바 스크립트에서 함수는 퍼스트 클래스 객체이므로 변수에 할당하고 전달할 수 있습니다. 우리가 window.addEventListener 방법에 keyEventLogger 변수를 전달하는

window.addEventListener("keydown", keyEventLogger);

알 수 있습니다. 이것이 의미하는 바는 - keydown 이벤트가 발생할 때마다 keyEventLogger 기능을 트리거하십시오. 자, 그 함수 내부를 살펴 보겠습니다 :이 줄은 누른 키의 유형에 따라 keyState 배열의 항목을 작성 (또는 업데이트)됩니다

keyState[e.keyCode] = e.type =='keydown';

.keydownkeyup 이벤트에 이벤트 리스너를 할당 했으므로 두 가지 가능성이 있습니다. Javascript는 먼저이 행의 e.type == 'keydown' 부분을 평가합니다. 눌려진 키가 keydown이면 true, 그렇지 않으면 false이됩니다. 따라서 keyState 배열에 저장된 값은 keydown 이벤트의 경우 이고 keyup 이벤트의 경우 이벤트의 경우 false입니다. 배열 인덱스는 키 코드입니다 (keydown의 경우 40, keyup의 경우 38).

희망이 도움이됩니다.

+0

이 문제를 해결해 주셔서 감사합니다. –

관련 문제