PyGameに何も描かれていないのはなぜですか?
pygameを使用してPythonで新しいプロジェクトを開始しました。背景には、下半分を灰色で、上半分を黒で塗りつぶしたいと思います。以前にプロジェクトで長方形の描画を使用したことがありますが、何らかの理由で壊れているようです。何が間違っているのかわかりません。最も奇妙なことは、プログラムを実行するたびに結果が異なることです。黒い画面しかない場合もあれば、灰色の長方形が画面の一部を覆っている場合もありますが、画面の半分を覆っている場合はありません。
import pygame, sys
from pygame.locals import *
pygame.init()
DISPLAY=pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
回答
表示を更新する必要があります。あなたは実際にSurfaceオブジェクトを描いています。PyGameディスプレイに関連付けられているサーフェスに描画した場合、これはディスプレイにすぐには表示されません。表示がpygame.display.update()またはで更新されると、変更が表示されますpygame.display.flip()。
参照pygame.display.flip():
これにより、ディスプレイ全体の内容が更新されます。
しながら、pygame.display.flip()
ディスプレイ全体の内容が更新され、pygame.display.update()
代わりに全領域のうち、更新された画面の一部だけを更新することができます。pygame.display.update()
はpygame.display.flip()
ソフトウェアディスプレイ用に最適化されたバージョンですが、ハードウェアアクセラレーションディスプレイでは機能しません。
典型的なPyGameアプリケーションループは次のことを行う必要があります。
- pygame.event.pump()またはのいずれかでイベントを処理しますpygame.event.get()。
- 入力イベントと時間(それぞれフレーム)に応じて、ゲームの状態とオブジェクトの位置を更新します
- ディスプレイ全体をクリアするか、背景を描画します
- シーン全体を描画します(すべてのオブジェクトを描画します)
- pygame.display.update()またはのいずれかで表示を更新しますpygame.display.flip()
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:
clock.tick(60)
# 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()
pygame.quit()
exit()