ホームページ >バックエンド開発 >Python チュートリアル >私の PyGame コードが何も描画しないのはなぜですか?

私の PyGame コードが何も描画しないのはなぜですか?

DDD
DDDオリジナル
2024-12-26 00:37:13593ブラウズ

Why Doesn't My PyGame Code Draw Anything?

PyGame が何も描画できない理由

PyGame プロジェクトは、pygame.draw.rect() を使用して、下が灰色、上が黒の背景を作成することを目的としています。関数。この関数を使用してこれまでに成功した経験があるにもかかわらず、一貫性のない描画結果が発生しています。黒い画面が表示される場合もあれば、画面の一部に灰色の四角形が表示される場合もあります。

この混乱は、PyGame では描画だけでは目に見える出力が生成されないという事実から生じます。関連付けられたサーフェスを変更した後、それらの変更を表示するにはディスプレイを更新する必要があります。

ディスプレイの更新

描画は、PyGame ディスプレイに関連付けられた Surface オブジェクト上で行われます。ただし、これらの変更は自動的には表示に反映されません。それらを表示するには、pygame.display.update() または pygame.display.flip() を使用して表示を明示的に更新する必要があります。

pygame.display.flip() は全体を更新します。一方、pygame.display.update() は、画面の特定の領域に対してより選択的な更新を提供します。通常、ソフトウェア ディスプレイ向けに最適化されていますが、ハードウェア アクセラレーション ディスプレイではサポートされていません。

PyGame アプリケーション ループ

典型的な PyGame アプリケーション ループは、次のいくつかのステップで構成されます。

  1. イベント処理: pygame.event.pump() またはpygame.event.get().
  2. 状態更新: 入力イベントと時間 (フレーム) に基づいてゲームの状態とオブジェクトの位置を更新します。
  3. 表示のクリア: 表示をクリアするか、背景を描画します。
  4. シーンdrawing: シーン内のすべてのオブジェクトを描画します。
  5. 表示更新: pygame.display.update() または pygame.display.flip() を呼び出して、変更を表示します。
  6. フレーム レート制限: 過剰な CPU 使用率を避けるために、1 秒あたりのフレーム数を制限します。 pygame.time.Clock.tick.

コード例

表示の更新を含む変更されたコードは次のとおりです:

import pygame
from pygame.locals import *
pygame.init()

DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()

run = True
while run:
    # handle events
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

    # clear display
    DISPLAY.fill(0)

    # draw scene
    pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

    # update display
    pygame.display.flip()

    # limit frames per second
    clock.tick(60)

pygame.quit()
exit()

必要な表示の更新を組み込むことによりそうすると、期待どおりの背景が灰色の底部と黒色の上部で表示されるはずです。

以上が私の PyGame コードが何も描画しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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