Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menjalankan Berbilang Semasa Gelung Secara serentak dalam Pygame?

Bagaimana untuk Menjalankan Berbilang Semasa Gelung Secara serentak dalam Pygame?

Linda Hamilton
Linda Hamiltonasal
2024-11-05 10:26:02867semak imbas

How to Run Multiple While Loops Simultaneously in Pygame?

Menjalankan Berbilang Semasa Gelung Serentak dalam Pygame

Dalam Pygame, adalah perkara biasa untuk melaksanakan berbilang tugasan secara serentak. Walau bagaimanapun, isu biasa timbul apabila cuba menjalankan berbilang gelung sementara secara serentak, kerana satu gelung mungkin menghalang orang lain daripada melaksanakan. Artikel ini menangani cabaran ini dan menyediakan penyelesaian untuk membolehkan berbilang gelung berjalan dengan lancar.

Memahami Konflik

Dalam coretan kod yang disediakan, dua gelung sementara digunakan:

  1. Gelung pemprosesan acara utama (gelung semasa pertama): Gelung ini sentiasa menyemak input pengguna dan mengemas kini keadaan permainan.
  2. Gelung kemas kini muka (gelung sambil kedua) : Gelung ini mengemas kini muka yang dipaparkan secara berkala.

Isu berlaku kerana gelung kedua mengandungi operasi menyekat (time.sleep()). Ini menghalang gelung pemprosesan acara utama daripada dijalankan, yang berpotensi menyebabkan atur cara menjadi tidak bertindak balas.

Penyelesaian: Menggunakan Sistem Pengukuran Masa Pygame

Menggantikan kaedah menyekat time.sleep() dengan ukuran masa Pygame sistem menangani isu tersebut. Pygame menyediakan fungsi, pygame.time.get_ticks(), yang mengembalikan bilangan milisaat sejak permulaan Pygame. Dengan menggunakan fungsi ini, anda boleh mengira dan menjejak selang masa untuk gelung kemas kini muka tanpa menyekat gelung lain.

Contoh Kod:

Berikut ialah versi diubah suai bagi kod yang menggunakan ini penyelesaian:

<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>

Dengan menggunakan sistem pengukuran masa Pygame, kod yang diubah suai ini membenarkan gelung pemprosesan acara utama dan gelung kemas kini muka beroperasi serentak tanpa sebarang gangguan.

Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Berbilang Semasa Gelung Secara serentak dalam Pygame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn