質問: ``` while True: for event in pygame.event.get(): if event.type==QUIT: print(event) pygame.quit() sys.exit() surface.fill((225, 0, 220)) surface.blit(text,textpos) pygame.display.update() clock.tick(10) ``` 上記は全体的なプログラムからの一部抜粋ですが、フローの流れとしてはイベントキューにイベントがたまっていないかを確認→あればイベントを処理、画面を描画、の順番で処理しているということでしょうか? while trueの前にt=0をおいて、1ループごとにt+=1をしてみてt=20の時にある処理を実行させようとしたのですが反映されませんでした。 解説を御願いしたいです。
回答: > > フローの流れとしてはイベントキューにイベントがたまっていないかを確認→あればイベントを処理、画面を描画、の順番で処理しているということでしょうか? > > > 質問にあるコードの場合、フローの流れはおっしゃる通りです。 ただし、**処理の順番はwhile文内にかかれているコードの順番で変わります**。 状況再現のため、以下のコードを自作してみました。 このコードの場合だと、イベントの確認・処理の前に画面の描画処理が行われます。 ``` import pygame from pygame.locals import * import sys pygame.init() surface=pygame.display.set_mode((640,480)) pygame.display.set_caption("サンプルゲーム") img=pygame.image.load("python.png")#動作確認用の画像 clock=pygame.time.Clock() t=0 while True: print('ループスタート') ###画面の描画 print('描画開始') surface.fill((t, 0, 220))#画面背景の色 surface.blit(img,(t*2,t*2))#画像の位置を移動させる pygame.display.update()#画面の描画 print('描画終了') ###イベントの確認・処理 for event in pygame.event.get(): if event.type==QUIT: print(event) pygame.quit() sys.exit() elif event.type==KEYDOWN:#キーを押し込んだとき t+=40 print('イベント処理,down') elif event.type==KEYUP:#押したキーを離したとき t-=20 print('イベント処理,up') t+=1 print(t) ###tが閾値を超えたときのイベント処理 if t>=200: surface.fill((0, 0, 0))#画面背景の色 surface.blit(img,(100,300))#画像の位置を移動させる pygame.display.update()#画面の描画 print('ok') break clock.tick(1) print('次のループへ') print('終了') ``` > > while trueの前にt=0をおいて、1ループごとにt+=1をしてみてt=20の時にある処理を実行させようとしたのですが反映されませんでした。 > > > 上記の自作コードでt>=200になった場合の処理について確認してみましたが、特に異常は見られませんでした。 t=20のときに実行される「ある処理」の部分に問題がある可能性があります。そちらのコードの検証が必要かと思われます。 長文になりましたが、ご参考になれば幸いです。