Pygame では、複数のタスクを同時に実行したいことがよくあります。ただし、複数の while ループを同時に実行しようとすると、1 つのループが他のループの実行をブロックする可能性があるため、一般的な問題が発生します。この記事では、この課題に対処し、複数のループをスムーズに実行できるようにするソリューションを提供します。
提供されたコード スニペットでは、2 つの while ループが使用されています:
この問題は、2 番目のループにブロック操作 (time.sleep()) が含まれているために発生します。これにより、メイン イベント処理ループの実行が妨げられ、プログラムが応答しなくなる可能性があります。
ブロッキング time.sleep() メソッドを Pygame の時間測定に置き換えます。システムが問題に対処します。 Pygame は、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 の時間測定システムを利用することで、この変更されたコードにより、メイン イベント処理ループと顔更新ループが中断することなく同時に動作できるようになります。
以上がPygameで複数のwhileループを同時に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。