2012-01-14 3 views
-2

나는 html5와 javascript에서 pong redux를 개발 중입니다. D를 누르고있을 때 ball.speedModifier 변수에서 4를 뺀 다음 D를 놓을 때 4를 더할 수 있도록 수정하는 데 도움이 필요합니다. 키를 놓을 때 수정자를 다시 0으로 설정하지 않은 이유는, 왜냐하면 나는 한 번에 그 스택을 다른 스택 위에 변경하는 것을 여러 가지로 바꾸기를 원하기 때문입니다. 현재 키 누름을 감지하는 현재 시스템에서는 변수의 더하기 및 빼기가 60FPS에서 반복되지만 금액을 다시 뺄 때까지 한 번만 발생하기를 원합니다. HTML : http://pastebin.com/txeNftNT
자바 스크립트 : http://pastebin.com/scpBqGqx변수를 임시 수정하는 데 도움이 필요하십니까

+1

SO Q & A는 자체 완비해야합니다. 외부 붙여 넣기 저장소 (특히 대화식으로 코드를 실행할 수있는 경우)에 연결하는 것이 좋지만 [최소 샘플] (http://sscce.org/) (완전하고 간결한 & 대표)을 질문에 포함해야합니다. 링크 된 페이지가 취소되거나 편집되는 경우. – outis

답변

0

이렇게하는 가장 쉬운 방법은 각 키의 추가 속성을 추적하는 것입니다. 키가 눌려 졌는지 확인하는 대신에, checkInput()의 이전 반복에서 키가 눌려 졌는지 올라가는지를 추적하려고합니다. 이렇게하면 "D"키가 눌려져 있지만 마지막 반복을 따라 내려 가지 않은 경우 ball.speedModifier에서 4를 뺍니다. 또는 "D"키가 눌러져 있지만 마지막 반복에서 위로 있지 않은 경우 4를 ball.speedModifier에 다시 추가합니다.

이 작업을 수행하는 마지막 열쇠는 모든 checkInput 루프가 끝날 때마다 각 키가 작동 중지되었는지 여부를 저장하는 것입니다. 그런 다음 checkInput()의 다음 루프에서 검사를 다시 수행 할 준비가됩니다.

다음은 단지 의사 코드이지만 잘하면 아이디어를 제공합니다.

function checkInput(){ 
if(d.isDown()){ 
    if(!d.wasDown()){ 
      ball.speedModifer -= 4; 
    } 
}else{ 
    if(d.wasDown()){ 
      ball.speedModifier += 4; 
    } 
} 

d.wasDown = d.isDown; 
} 

경우에 따라 작동 예제도 함께 제공합니다. 세 가지 변경 사항에 유의하십시오. 귀하의 pressedKeys는 더 이상 배열이 아니라 기존 KEY 객체의 VALUES에 해당하는 KeyCode 객체입니다. 그리고이 키의 값은 "wasDown"과 "isDown"이라는 두 개의 키를 가진 객체 자체입니다. 그런 다음 init()의 끝에서이 객체를 미리 채운 다음 배열 대신 새 객체를 사용하여 checkInput에서 다양한 검사와 업데이트를 수행합니다. 도움이

http://jsfiddle.net/gUgGf/

희망이!

+1

와우,이게 내가 필요한거야! 도와 주셔서 정말 감사합니다! –

0

난 당신이 원하는 일을하는 두 가지 매우 간단한 방법을 생각할 수 있습니다 : 여기

내 코드의 pastie입니다

  1. 변수가 되세요 저장 기본 값 다음에 각 프레임은 값을 직접 편집하는 대신 적용 가능한 수정 자에 대한 모든 계산을 수행합니다.
  2. 당신이 당신의 keydown 이벤트에서에 키를 눌러 pressedThisFrame 같은 배열 이름이 뭔가를하고 메인 루프에서 당신은 당신의 전체 pressedKeys 배열에 pressedThisFrame의 밖으로의 항목을 이동하고, 그 이동의 일부 수정은 어떤 수행 포함 적당한.
+0

정확히 내가하려고하는 것에 해당되는 것 같지 않습니다. 어쩌면 코드 예제를 제공 할 수 있습니까? 간단히 말하면, 나는 D가 볼을 천천히하고, D를 풀어 정상 속도로 되 돌리고 싶습니다. 그러나 볼의 속도에 대한 변수를 직접 설정하지 않기를 바랍니다. 대신 공의 속도를 수정하는 변수에 추가하기를 원합니다. –

관련 문제