Pygame で複数の While ループを同時に実行する方法
Pygame アプリケーションでは、time.sleep のようなブロック関数の使用を避けることが重要です() 遅延を実行します。代わりに、アプリケーション ループと pygame.time.get_ticks() などの関数を利用して、時間関連のタスクを管理します。
課題を理解する
で提供されているコード内クエリでは、複数の while ループが同時に実行しようとしますが、time.sleep() を使用する 1 つのループが他のループの実行をブロックします。
解決策: Pygame Time 関数の使用
時間遅延を正しく処理するには、pygame.time.get_ticks() を使用して時間を取得します。 現在の時刻に基づいて特定のアクションをいつ実行するかを計算します。現在の時間が計算された時間を超えた場合、アクションを実行します。
改訂コード:
<code class="python">import pygame import random from time import time pygame.init() faces = ['^-^', '^v^', '◡◠◠', "'v'", '⁀◡⁀'] display = pygame.display.set_mode((800, 600)) font = pygame.font.Font('unifont.ttf', 100) surface = font.render(random.choice(faces), 1, (0, 255, 0)) center = surface.get_rect(center=(800/2, 600/2)) next_render_time = time() run = True while run: current_time = time() for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if current_time >= next_render_time: surface = font.render(random.choice(faces), 1, (0, 255, 0)) next_render_time = current_time + random.randint(5, 10) display.fill((0, 0, 0)) display.blit(surface, center) pygame.display.flip()</code>
このコードでは、next_render_time 変数に、アクションが実行された時間を格納します。顔を更新する必要があります。現在の時間がこの値を超えると、新しい面がランダムに選択され、レンダリングされて表示されます。このアプローチにより、複数のループをブロックせずに同時に実行できます。
以上がPygame でブロックを回避し、複数のループを同時に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。