首頁 >後端開發 >Python教學 >如何在 Pygame 中同時執行多個 While 迴圈?

如何在 Pygame 中同時執行多個 While 迴圈?

Linda Hamilton
Linda Hamilton原創
2024-11-05 10:26:02944瀏覽

How to Run Multiple While Loops Simultaneously in Pygame?

在 Pygame 中同時執行多個 While 迴圈

在 Pygame 中,想要同時執行多個任務是很常見的。然而,當嘗試同時執行多個 while 迴圈時,會出現一個常見問題,因為一個迴圈可能會阻止其他迴圈的執行。本文解決了這項挑戰,並提供了使多個循環能夠順利運行的解決方案。

理解衝突

在提供的程式碼片段中,使用了兩個while 循環:

  1. 主事件處理循環(第一個while 循環):此循環不斷檢查使用者輸入並更新遊戲狀態。
  2. 臉部更新循環(第二個 while 循環) :此循環定期更新顯示的面。

出現此問題的原因是第二個迴圈包含阻塞操作 (time.sleep())。這會阻止主事件處理循環運行,從而可能導致程式無回應。

解決方案:使用 Pygame 的時間測量系統

用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn