ホームページ  >  記事  >  バックエンド開発  >  Pygame でブロックを回避し、複数のループを同時に実行するにはどうすればよいですか?

Pygame でブロックを回避し、複数のループを同時に実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 05:39:03999ブラウズ

How to Avoid Blocking and Run Multiple Loops Simultaneously in Pygame?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。