pygame.event.get() 별도 스레드 내에서 이벤트 반환 실패
이 쿼리는 pygame.event를 사용할 때 발생하는 어려움과 관련이 있습니다. 팩맨에서 영감을 받은 게임에서 사용자 입력을 관리하기 위한 별도의 스레드 내의 .get()입니다. 입력 수신을 담당하는 코드 조각은 다음과 같습니다.
def receiving_inputs(self): while True: events = pg.event.get() for event in events: if event.type == pg.KEYDOWN: if event.key == pg.K_UP: self.move = 'n' elif event.key == pg.K_RIGHT: self.move = 'e' elif event.key == pg.K_DOWN: self.move = 's' elif event.key == pg.K_LEFT: self.move = 'w' time.sleep(1/60) threading.Thread(target=self.receiving_inputs).start()
이 코드가 실행되면 키보드 키를 눌러도 이벤트가 트리거되지 않지만 마우스를 움직이면 이벤트가 반환됩니다. 흥미롭게도 별도의 스레드가 아닌 프로그램의 메인 루프 내에서 실행될 때 동일한 코드가 완벽하게 작동합니다.
이 질문은 별도의 스레드를 사용하여 메인 루프에서 등록되지 않은 키 누름 인스턴스를 최소화하려는 욕구에서 비롯됩니다. .
해결 방법:
예기치 않은 동작은 다음과 같은 사실에서 비롯됩니다. 이벤트는 메인 스레드 내에서 관리되어야 합니다. pygame.event 문서에 명시된 바와 같이:
[...] 이벤트 하위 시스템은 메인 스레드에서 호출되어야 합니다.
별도 스레드에서 이벤트를 게시하는 것이 가능하지만 이벤트 큐는 메인 스레드에서만 처리할 수 있습니다. 따라서
메인 스레드에서 이벤트가 획득되었는지 확인하세요.
def receiving_inputs(self): while True: events = pg.event.get() for event in events: ...
스레드를 생성하여 게임 상태를 기반으로 수정합니다. 이벤트:
def move(self, move): ... thread = threading.Thread(target=self.move, args=(move,)) thread.start()
위 내용은 `pygame.event.get()`이 별도의 스레드에서 이벤트를 반환하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!