2016-08-02 5 views
2

현재 getch() (키가 될 때까지 일시 중지)처럼 작동하는 함수를 만들려고합니다. sfml 라이브러리 만 사용하십시오. 이것은 이벤트 루프 외부에서 호출 될 것으로 예상된다는 점에 유의해야합니다. 나는 그와 비슷한 것을 찾기 위해 노력했지만 아무 것도 찾지 못했습니다.sfml에 getch와 동일한 기능이 있습니까?

int waitForKeyboardHit (sf::Window *win) { 
    sf::Event event; 
    while (true) { 
     while (win->pollEvent (event)) { 
      if (event.type == sf::Event::KeyPressed) { 
       return event.key.code; 
      } 
     } 
    } 
    return -1; 
} 

그 어떤 및 KeyPressed 이벤트 대신 함수의 호출되는이 기능 이전에 이벤트 창 큐에 갈 그러나 경우, 대부분의 경우 잘 작동하는 동안이 아니라, 즉시 끝 : 그것을 위해 내 현재 코드는 다음과 같습니다 다음 키보드가 눌려 질 때까지 기다린다. 이 함수를 호출하기 전에 윈도우의 이벤트 대기열을 지우는 방법을 찾으려고했지만 그 중 하나를 수행 할 수있는 것도 찾지 못했습니다.

답변

1

while (win->pollEvent(event)) ; (세미콜론을 염두에 두어라)은 이벤트 큐를 지우지 만, 어떻게하면 좋을지는 모르겠다. 전체 프로그램을 멈추고 입력을위한 논리를 유지하는 것은 좋은 일이 아니다. 어떤 종류의 FSA을 사용하면 더 좋을 것이라고 믿습니다. 동전의 기계 대기 (당신이 키를 눌러 대기 등) 위키 백과에서이 예처럼 : 게다가 image

, 당신은 당신의 장면을 다시 그려야 적어도 때때로 화면을 새로 고침 당신의 while(true) 루프에서 display() 전화 시각.

관련 문제