> 백엔드 개발 > 파이썬 튜토리얼 > `pygame.event.get()`이 별도의 스레드에서 이벤트를 반환하지 못하는 이유는 무엇입니까?

`pygame.event.get()`이 별도의 스레드에서 이벤트를 반환하지 못하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-01 11:54:13
원래의
715명이 탐색했습니다.

Why Does `pygame.event.get()` Fail to Return Events in a Separate Thread?

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 문서에 명시된 바와 같이:

[...] 이벤트 하위 시스템은 메인 스레드에서 호출되어야 합니다.

별도 스레드에서 이벤트를 게시하는 것이 가능하지만 이벤트 큐는 메인 스레드에서만 처리할 수 있습니다. 따라서

  1. 메인 스레드에서 이벤트가 획득되었는지 확인하세요.

    def receiving_inputs(self):
        while True:
            events = pg.event.get()
            for event in events:
                ...
    로그인 후 복사
  2. 스레드를 생성하여 게임 상태를 기반으로 수정합니다. 이벤트:

    def move(self, move):
        ...
    
    thread = threading.Thread(target=self.move, args=(move,))
    thread.start()
    로그인 후 복사

위 내용은 `pygame.event.get()`이 별도의 스레드에서 이벤트를 반환하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿