2017-04-23 3 views
1

JavaScript를 사용하여 2D 플랫폼 게임에서 캐릭터의 키보드 컨트롤을 추가하려고합니다. 문자는 walk, dash and jump 일 수 있습니다. 여기에 내 현재 코드입니다 : 내 코드의 다른2D 플랫폼 게임에서 복잡한 입력을 처리하는 방법은 무엇입니까?

if(keyboard['LEFT']) { 
    //walk to left 
    //... 
} else if (keyboard['RIGHT']) { 
    //walk to right 
    if(keyboard['SHIFT'] && !jump) { 
     //dash 
    } 
    if(keyboard['JUMP']) { 
     //jump to right 
    } 
    if(keyboard['SHIFT'] && keyboard['JUMP']) { 
     //dash and jump (move further and faster) 
    } 
    if(keyboard['JUMP'] && keyboard['SHIFT']) { 
     //hold the right key, pressed jump key, and then pressed shift key 
     //it expected to jump to right here, because character can not dash 
     //in midair, but it will conflict the if condition above. 
    } 
} else if (keyboard['JUMP'] && onGround) { 
    //jump 
} else if (keyboard['SHIFT']) { 
    //dash 
    if(keyboard['JUMP']) { 
     //dash and jump 
    } 
} 

내가 (있는 경우 많은 있다는 것을 혼란 스러워요)() 문, 그리고 내가 거기에 키보드 inputs.Is 쉬운 방법의 순서를 제어 할 필요가 보인다 내가 그걸 제대로 처리 할 수 ​​있을까요? 그렇지 않다면, 그것을 달성하기위한 일반적인 방법은 무엇입니까? 제발, 어떤 도움을 주시면 감사하겠습니다.

+0

아마도 스위치 케이스를 사용하고 각 경우에 해당 함수를 호출할까요? – Ayan

+0

@Ayan 키보드 입력 순서를 기록해야합니까? – undefined000

+0

'주문 기록'이란 무엇을 의미합니까? 시퀀스를 유지한다는 의미라면 NO. 사용자 (여기서는 키를 누른 상태)의 입력을 받아 각각의 작업을 수행하기 만하면됩니다. – Ayan

답변

1

좋아, 나는 JS에서 멍청한 놈으로 이것을 짧게하려고 노력할 것이다. 다음 답변은 원시 JS가 아닌 jQuery를 기반으로합니다. 당신이 switch case를 사용하거나 if..else을 사용할 수 있습니다 조건문을 넣는 대신 지금

var map = {}; // You could also use an array 
onkeydown = onkeyup = function(e){ 
     e = e || event; // to deal with IE 
     map[e.keyCode] = e.type == 'keydown'; 
     /* Put your conditional statements here */ 
} 

: 당신이 여기하려고 노력하는 것은 당신이 다음과 같이 뭔가를 시도 할 수 있도록 여러 개의 키 입력을 처리 기본적으로
. 다음과 같이 뭔가를 할 것이다 :

if(map[17] && map[16] && map[65]){ // CTRL+SHIFT+A 
     alert('Control Shift A'); 
}else if(map[17] && map[16] && map[66]){ // CTRL+SHIFT+B 
     alert('Control Shift B'); 
}else if(map[17] && map[16] && map[67]){ // CTRL+SHIFT+C 
     alert('Control Shift C'); 
} 

this 내가 위의 코드를 추출있는 최선의 대답이다.

내가 자세히 설명 했으므로 신중하게 대답 해 주시고 게임 개발을 진행하면서 많은 버그 수정 및 개선 사항을 알려 드리겠습니다. 의견도 꼭 읽으십시오.

UPDATE :

급한와 나, 다음 조금 더 쉽게 당신의 인생을 만들 수있는 다른 JS libs와 많이 있습니다 다음 테스트 및 디버그를 자신의 코드를 작성하지 않으 가정 . 그들 중 일부는 mousetrap.js, jwerty.js, keypress.js 등은 here입니다.

+0

와우, 정말 대단합니다. 나는 당신에게 영감을 받았습니다, 정말 고마워요! – undefined000

+0

나의 명성이 15 미만이기 때문에 나는 그것을 업 와이어화할 수 없었다. – undefined000

관련 문제