2016-11-14 7 views
1

나는 메뉴를 코딩하고있어 keystate 화재 만 불을 확인하고 키가이 같은 사이클을 누를 때 감지 keyState[SDL_SCANCODE_KEY]를 사용

if (Button1 && keyState[SDL_SCANCODE_DOWN]) 
{ 
    Button1 = false; 
    Button2 = true; 
} 
else if (Button2 && keyState[SDL_SCANCODE_DOWN]) 
{ 
    Button2 = false; 
    Button3 = true; 
} 
else if (button3 && keyState[SDL_SCANCODE_DOWN]) 
{ 
    //and so on 
} 

이 설정에 대한 문제는 그러나 그 때 사용자 프레스입니다 버튼 2가 버튼 3을 활성 상태로 전환하는 등의 조건을 유지하면서 여러 차례 키스톤이 발생하는 다운 키. 그렇다면 keystate를 한 번만 만들거나 최소한이 문제를 해결하려면 어떻게해야합니까? 감사.

+0

이것은 펌웨어와 관련이 있으며 키패드에서 키를 받고 있다고 생각합니다. 권리? – Sean83

+0

@ Sean83 예, 키패드에서 키를받습니다. –

+0

@StackOverflow 당신이 달성하기를 원하는 것이 불분명합니다. 사용자가 다시 반응하기 전에 버튼을 놓기를 원한다면 keystate/keyup 이벤트를 keystate와 함께 사용하고 싶을 것입니다 (키 이벤트가 반복되지만 key가 진짜인지 또는 반복되는지 알아내는 bool 플래그가 있다는 것을 알아 두십시오).). – keltar

답변

0

시스템 (CPU)이 너무 빠르기 때문에 이런 현상이 발생합니다. 이를 피하기 위해 타이머 또는 지연을 사용할 수 있습니다.

간단히 해결하려면 지연을 사용할 수 있습니다. 마지막에

delay(1000); // which means delay 1000 clock cycles. 

당신은 수를 (즉, 1000) 수정하여 길이를 조정할 수 있습니다 시도하지만 복잡한 시스템에서 중요 할 수있는 지연 기능을 사용하여 해당주의하시기 바랍니다. 이 시스템에서는 Timer를 사용할 수 있지만 구현하기가 더 복잡합니다.

+0

이 방법으로 눈에 띄는 입력 지연이 있지만 이것을 답변으로 표시했습니다. 그래도 고마워. –

+0

몇 가지 덧글을 추가했습니다. 정확히 어떤 시스템을 사용하고 있는지 모르겠으므로 타이머에 대한 직접적인 대답을 드릴 수는 없습니다. – Sean83

+0

덕분에, 그게 도움이 :) –