수색…


이벤트 루프

Pygame은 사용자의 모든 이벤트를 pygame.event.get() 코드와 함께 수신 할 수있는 이벤트 대기열에 등록합니다. 이 큐의 모든 요소는 Event 객체이며 모든 유형의 이벤트를 나타내는 정수형 인 속성 type 갖습니다. 파이 게임 모듈에는 유형을 나타내는 미리 정의 된 정수 상수가 있습니다. 이 속성을 제외하고 이벤트에는 다른 속성이 있습니다.

상수 속성
떠나다 없음
활성 이득, 상태
키 다운 유니 코드, 키, 모드
키업 키, 모드
MOUSEMOTION pos, rel, buttons
마우스 단추 위치, 버튼
마우스 버튼 다운 위치, 버튼
조이 액스 모이 션 기쁨, 축, 가치
JOYBALLMOTION 기쁨, 공, rel
조이 탐 기쁨, 모자, 가치
JOYBUTTONUP 기쁨, 버튼
기쁨 기쁨, 버튼
비디오 제작 크기, w, h
비디오 텍스트 없음
사용자 암호

우리의 이벤트를 처리하기 위해 단순히 대기열을 순환하여 파이 게임 모듈의 미리 정의 된 상수를 사용하여 어떤 유형인지 확인한 다음 일부 작업을 수행합니다. 이 코드는 사용자가 디스플레이의 상단 모서리에있는 닫기 버튼을 눌렀는지 확인한 다음 프로그램 종료시 확인합니다.

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        # Close the program any way you want, or troll users who want to close your program.
        raise SystemExit

주의 : 파이 게임을 사용할 때 이벤트 큐를 정기적으로 호출해야합니다! 사용 가능한 이벤트를 가져 오는 것 외에 이벤트 큐를 호출하는 것은 운영 체제와 내부적으로 상호 작용하는 파이 게임의 방식이기도합니다. 이벤트 대기열이 정기적으로 호출되지 않으면 운영 체제는 프로그램이 더 이상 제대로 작동하지 않는다고 판단하여 프로그램이 손상된 것처럼 보일 수 있습니다 (Windows에서는 창이 흰색으로 바뀝니다). 이벤트에 아무 것도하고 싶지 않으면 pygame.event.pump() 호출하여 모든 게임 루프를 호출하여 파이 게임이 이벤트를 내부적으로 처리하도록해야합니다.


키보드 이벤트

: 파이 게임에서 키 이벤트의 두 가지 유형이 있습니다 KEYDOWNKEYUP . 이러한 이벤트에는 키보드의 키를 나타내는 정수인 속성 key 가 있습니다. 파이 게임 모듈에는 모든 공통 키를 나타내는 미리 정의 된 정수 상수가 있습니다. 상수는 대문자 K , 밑줄 및 키 이름으로 이름이 지정됩니다. 예를 들어, <-K_BACKSPACE , aK_a , F4 는 K_F4로 K_F4 됩니다.

이 코드는 사용자가 w , a , s 또는 d를 눌렀는지 확인합니다.

for event in pygame.event.get():
    if event.type == pygame.QUIT:  # Usually wise to be able to close your program.
        raise SystemExit
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_w:
            print("Player moved up!")
        elif event.key == pygame.K_a:
            print("Player moved left!")
        elif event.key == pygame.K_s:
            print("Player moved down!")
        elif event.key == pygame.K_d:
            print("Player moved right!")

수정 자

대문자에는 정수 상수가 없습니다. 대신 키 이벤트에는 mod 라는 다른 속성이 있습니다.이 키는 동시에 키로 눌려지는 수정 자 ( Shift , Ctrl , Alt 등)입니다. mod 속성은 눌려진 수정자를 나타내는 정수입니다. 각 수정 자의 정수 값은 KMOD_ 이름과 그 이름으로 파이 게임 모듈에 저장됩니다. 예를 들어 왼쪽 시프트KMOD_LSHIFT , KMOD_TAB , CtrlKMOD_CTRL 입니다.

이 코드는 사용자가 a , Left shift + a 또는 Caps + a를 눌렀는지 확인 합니다 .

for event in pygame.event.get():
    if event.type == pygame.QUIT:  # It's still wise to be able to close your program.
        raise SystemExit
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_a:
            if event.mod == 0:  # No modifier.
                print("You pressed 'a'")
            elif event.mod == pygame.KMOD_LSHIFT or event.mod == pygame.KMOD_CAPS:
                print("You pressed 'A'")
            else:
                print("You pressed 'a' with another modifier than right shift or caps.")

마우스 이벤트

pygame MOUSEMOTION , MOUSEBUTTONDOWNMOUSEBUTTONUP 에는 세 가지 유형의 마우스 이벤트가 있습니다. 파이 게임은 디스플레이 모드가 설정되면 이러한 이벤트를 등록합니다.

MOUSEMOTION 은 사용자가 자신의 마우스를 디스플레이에서 움직일 때 수신됩니다. buttons , posrel 속성이 있습니다.

  • buttons 은 마우스 버튼 ( left , mouse-wheel , right )이 눌려지고 있는지를 나타내는 튜플입니다.
  • pos 는 커서의 절대 위치 ( x , y )입니다 (픽셀 단위).
  • rel 은 이전 위치 ( rel_x , rel_y )에 상대적인 위치 (픽셀 단위)입니다.

MOUSEBUTTONDOWNMOUSEBUTTONUP 은 사용자가 마우스 버튼을 눌렀거나 놓을 때 수신됩니다. 속성 buttonpos 있습니다.

  • button 은 눌려진 버튼을 나타내는 정수입니다. 왼쪽 버튼 1 개, 마우스 휠 2 3 , 오른쪽 버튼 3 .
  • pos 는 사용자가 마우스 버튼을 눌렀을 때 마우스 ( x , y )의 절대 위치입니다.

다음은 각 마우스 이벤트의 속성 중 일부를 사용하는 간단한 예입니다.

for event in pygame.event.get():
    if event.type == pygame.QUIT:  # Close your program if the user wants to quit.
        raise SystemExit
    elif event.type == pygame.MOUSEMOTION:
        if event.rel[0] > 0:  # 'rel' is a tuple (x, y). 'rel[0]' is the x-value.
            print("You're moving the mouse to the right")
        elif event.rel[1] > 0:  # pygame start y=0 at the top of the display, so higher y-values are further down.
            print("You're moving the mouse down")
    elif event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:
            print("You pressed the left mouse button")
        elif event.button == 3:
            print("You pressed the right mouse button")
    elif event.type == pygame.MOUSEBUTTONUP:
        print("You released the mouse button")

파이 게임 모듈에는 마우스 버튼 속성에 대해 미리 정의 된 상수가 없으므로 각 값은 다음과 같습니다.

단추
마우스 왼쪽 버튼 1
마우스 휠 버튼 2
마우스 오른쪽 버튼
마우스 휠 위로 스크롤 4
마우스 휠이 아래로 스크롤됩니다. 5

마우스 버튼을 스크롤하면 pygame.MOUSEBUTTONDOWNpygame.MOUSEBUTTONUP 이벤트가 생성됩니다.

상태 확인

pygame.keypygame.mouse 모듈에서 함수를 호출하여 키와 마우스의 상태를받을 수 있습니다. 그러나 파이 게임에서 몇 가지 결함이 있기 때문에 이벤트를 처리하는 것은 권장 된 방법이 아닙니다.

  • 함수가 호출 될 때 상태를받습니다. 즉, 사용자가 버튼을 빠르게 누르면 호출간에 이벤트가 누락 될 수 있습니다.

  • 이벤트의 순서를 결정할 수는 없습니다.

  • 파이 게임이 내부적으로 운영체제와 상호 작용할 수 있도록 파이 게임의 이벤트 함수 중 하나를 호출해야합니다. 그렇지 않으면 프로그램이 응답하지 않는다고 경고합니다. 호출 할 수있는 함수는 다음과 같습니다.

    • pygame.event.get() 을 사용하여 모든 이벤트 또는 이벤트 유형 (유형을 인수로 전달하여)을 큐에서 가져옵니다.
    • pygame.event.poll() 대기열에서 하나의 단일 이벤트를 가져옵니다.
    • pygame.event.wait() 대기열에서 하나의 단일 이벤트를 기다립니다.
    • pygame.event.clear() 를 사용하여 큐의 모든 이벤트를 지 웁니다.
    • pygame.event.pump() pygame이 내부 동작을 처리하도록합니다 (위의 함수에 의해 암시 적으로 호출 됨).

키보드 이벤트

키 모듈에는 모든 키의 상태 목록을 반환하는 pygame.key.get_pressed() 함수가 있습니다. 이 목록에는 포함 0 누를되지 않은 모든 키 1 을 누르면 모든 키에 대한합니다. 목록의 색인은 pygame 모듈의 상수로 정의되며 모두 앞에 K_ 와 키 이름이 붙습니다.

pygame.event.pump()  # Allow pygame to handle internal actions.
key = pygame.key.get_pressed()
if key[pygame.K_a]:
    print("You pressed 'a'")
if key[pygame.K_F1]:
    print("You pressed 'F1'")
if key[pygame.K_LSHIFT]:
    print("You pressed 'left shift'")
if key[pygame.K_q]:  # Press 'q' to exit the program
    quit()

키를 누르고있는 대신 하나의 키 누름을 확인하려면 모든 키의 이전 상태를 임시 변수에 저장하고 값이 변경되는지 확인하십시오.

pygame.event.pump()  # Allow pygame to handle internal actions.
key = pygame.key.get_pressed()
if key[pygame.K_q] and not previous_key[pygame.K_q]:
    print("You pressed 'q'")
if key[pygame.K_p] and not previous_key[pygame.K_p]:
    print("You pressed 'p'")
previous_key = key

이 명령문은 현재 키가 눌려지고 이전 키가 눌러지지 않은 경우에만 true로 평가됩니다. 사용자가 키를 if not key[pygame.K_q] and previous_key[pygame.K_q] 하려면 not 키워드 ( if not key[pygame.K_q] and previous_key[pygame.K_q] 만 전환하면됩니다. 올바르게 작동하려면 게임 루프 전에 previous_key = pygame.key.get_pressed() 변수를 설정해야합니다. 그렇지 않으면 NameError 수신됩니다.

마우스 이벤트

마우스 모듈에는 마우스의 위치를 ​​확인하고 설정할 수있는 기능과 버튼을 눌렀는지 확인하는 기능이 있습니다. pygame.mouse.get_pressed() 함수는 마우스 버튼 (왼쪽, 마우스 휠, 오른쪽)이 눌려지고 있는지를 나타내는 튜플 튜플을 반환합니다.

pygame.event.pump()  # Allow pygame to handle internal actions.
mouse_pos = pygame.mouse.get_pos()
mouse_buttons = pygame.mouse.get_pressed()
if mouse_pos[0] > 100:
    pygame.mouse.set_pos(10, mouse_pos[1])  # Reset the mouse's x-position to 10.
    print("YOU SHALL NOT PASS!")
if mouse_buttons[2]:
    print("I'm right, right?")
if mouse_buttons[0]:  # Press left mouse button to exit.
    print("Program left")
    quit()


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow