Pygame에서는 여러 작업을 동시에 실행하려는 것이 일반적입니다. 그러나 여러 while 루프를 동시에 실행하려고 하면 하나의 루프가 다른 루프의 실행을 차단할 수 있으므로 일반적인 문제가 발생합니다. 이 문서에서는 이 문제를 다루고 여러 루프가 원활하게 실행될 수 있도록 하는 솔루션을 제공합니다.
제공된 코드 조각에서는 두 개의 while 루프가 사용됩니다.
두 번째 루프에 차단 작업(time.sleep())이 포함되어 있기 때문에 문제가 발생합니다. 이렇게 하면 메인 이벤트 처리 루프가 실행되지 않아 잠재적으로 프로그램이 응답하지 않게 됩니다.
blocking time.sleep() 메서드를 Pygame의 시간 측정으로 교체 시스템이 문제를 해결합니다. 파이게임은 파이게임 초기화 이후의 밀리초 수를 반환하는 pygame.time.get_ticks() 함수를 제공합니다. 이 기능을 사용하면 다른 루프를 차단하지 않고 얼굴 업데이트 루프의 시간 간격을 계산하고 추적할 수 있습니다.
다음은 이를 사용하는 수정된 코드 버전입니다. 솔루션:
<code class="python">import random import pygame import pygame.freetype # Initialize pygame and game variables face = ['^-^', '^v^', '◠◡◠', "'v'", '⁀◡⁀'] faceDisplay = pygame.freetype.Font('unifont.ttf', 100).render(random.choice(face), 1, (0, 255, 0)) screen = pygame.display.set_mode((800, 600)) run = True # Variable used to track next face update time next_render_time = 0 # Main game loop while run: # Handle events (quit, keyboard input, etc.) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # Calculate current time current_time = pygame.time.get_ticks() # Check if enough time has passed since the last face update if current_time >= next_render_time: # Update the displayed face and calculate the next update time faceDisplay = pygame.freetype.Font('unifont.ttf', 100).render(random.choice(face), 1, (0, 255, 0)) next_render_time = current_time + random.randint(5, 10) * 1000 # Generate random time interval # Clear the screen, draw the updated face, and flip the display screen.fill((0, 0, 0)) screen.blit(faceDisplay, (screen.get_width() // 2, screen.get_height() // 2)) pygame.display.flip()</code>
Pygame의 시간 측정 시스템을 활용하여 이 수정된 코드를 사용하면 메인 이벤트 처리 루프와 얼굴 업데이트 루프가 중단 없이 동시에 작동할 수 있습니다.
위 내용은 파이게임에서 여러 While 루프를 동시에 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!