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

Pygameで複数のwhileループを同時に実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-05 10:26:02937ブラウズ

How to Run Multiple While Loops Simultaneously in Pygame?

Pygame で複数の While ループを同時に実行する

Pygame では、複数のタスクを同時に実行したいことがよくあります。ただし、複数の while ループを同時に実行しようとすると、1 つのループが他のループの実行をブロックする可能性があるため、一般的な問題が発生します。この記事では、この課題に対処し、複数のループをスムーズに実行できるようにするソリューションを提供します。

競合について

提供されたコード スニペットでは、2 つの while ループが使用されています:

  1. メイン イベント処理ループ (最初の while ループ): このループはユーザー入力を継続的にチェックし、ゲームの状態を更新します。
  2. 顔更新ループ (2 番目の while ループ) : このループは、表示されている顔を定期的に更新します。

この問題は、2 番目のループにブロック操作 (time.sleep()) が含まれているために発生します。これにより、メイン イベント処理ループの実行が妨げられ、プログラムが応答しなくなる可能性があります。

解決策: Pygame の時間測定システムを使用する

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

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