2

PyGame を使用すると、ちらつきが発生します。ボックス、円、テキスト、すべてちらつきます。ループ間の待機を増やすことでこれを減らすことができますが、すべてを個別に行うのではなく、すべてを一度に画面に描画することで解消できるかもしれません。これが私に何が起こるかの簡単な例です:

    pygame、時間のインポート
    pygame.init()
    screen = pygame.display.set_mode((400, 300))
    ループ=「はい」
    while loop=="はい":
        screen.fill((0, 0, 0), (0, 0, 400, 300))
        font = pygame.font.SysFont("カリブリ",40)
        text = font.render("TextA", True,(255,255,255))
        screen.blit(テキスト,(0,0))
        pygame.display.update()

        font = pygame.font.SysFont("カリブリ",20)
        text = font.render("Begin", True,(255,255,255))
        screen.blit(テキスト,(50,50))
        pygame.display.update()
        時間.スリープ(0.1)

「開始」ボタンがちらつきます。私のコンピューターが遅いだけかもしれませんが、ちらつきを軽減または排除する方法はありますか? 私が取り組んでいるより複雑なことでは、それは本当に悪くなります。ありがとう!

4

4 に答える 4

3

TextAループ内で画面を2回更新していますBegin

begin最初の更新後は、最初のテキストのみが表示されるため、最初の更新と 2 回目の更新の間のテキストは表示されません。ちらつきの原因となります。

すべてを描画した後、画面を更新します。あなたの場合、最初に削除してくださいpygame.display.update()

于 2012-07-02T20:44:54.673 に答える
2

画面全体のコンテンツを 0.1 秒ごとに再描画しています。実際に行った変更を追跡し、実際に変更されたコンテンツを含む四角形のみを更新する方が、はるかに一般的で高速です。したがって、ループの外側にすべてを描画し、イベントで画面を変更して、実際に変更された四角形を追跡します。

だから、このようなもの:

import pygame, time
pygame.init()
screen = pygame.display.set_mode((400, 300))
screen.fill((0, 0, 0), (0, 0, 400, 300))
font = pygame.font.SysFont("calibri",40)
text = font.render("TextA", True,(255,255,255))
screen.blit(text,(0,0))
font = pygame.font.SysFont("calibri",20)
text = font.render("Begin", True,(255,255,255))
screen.blit(text,(50,50))
loop = "yes"
counter = 0
dirty_rects = []
while loop=="yes":
    pygame.display.update()
    time.sleep(0.1)
    # Handle events, checks for changes, etc. Call appropriate functions like:
    counter += 1
    if counter == 50:
        font = pygame.font.SysFont("calibri",20)
        text = font.render("We hit 50!", True,(255,255,255))
        screen.blit(text,(50,100))
        dirty_rects.append(Rect((50,100),text.get_size()))
于 2012-07-02T20:54:34.927 に答える