在 Pygame 中,想要同時執行多個任務是很常見的。然而,當嘗試同時執行多個 while 迴圈時,會出現一個常見問題,因為一個迴圈可能會阻止其他迴圈的執行。本文解決了這項挑戰,並提供了使多個循環能夠順利運行的解決方案。
在提供的程式碼片段中,使用了兩個while 循環:
出現此問題的原因是第二個迴圈包含阻塞操作 (time.sleep())。這會阻止主事件處理循環運行,從而可能導致程式無回應。
用 Pygame 的時間測量替換阻塞 time.sleep() 方法系統解決了這個問題。 Pygame 提供了一個函數 pygame.time.get_ticks(),它傳回自 Pygame 初始化以來的毫秒數。透過使用此函數,可以計算和追蹤臉部更新循環的時間間隔,而不會阻塞其他循環。
這裡是使用這些程式碼的修改版本解決方案:
<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 的時間測量系統,此修改後的程式碼允許主事件處理循環和臉部更新循環同時運行而不會出現任何中斷。
以上是如何在 Pygame 中同時執行多個 While 迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!