質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

1481閲覧

pygameの仕様について

babbleman

総合スコア107

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/03/02 11:52

編集2022/01/12 10:55

python3

1 2 while True: 3 for event in pygame.event.get(): 4 if event.type==QUIT: 5 print(event) 6 pygame.quit() 7 sys.exit() 8 surface.fill((225, 0, 220)) 9 surface.blit(text,textpos) 10 pygame.display.update() 11 clock.tick(10) 12

上記は全体的なプログラムからの一部抜粋ですが、フローの流れとしてはイベントキューにイベントがたまっていないかを確認→あればイベントを処理、画面を描画、の順番で処理しているということでしょうか?
while trueの前にt=0をおいて、1ループごとにt+=1をしてみてt=20の時にある処理を実行させようとしたのですが反映されませんでした。
解説を御願いしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/03/02 11:56

反映されないとはどうなるんでしょう。そこらへん詳しく説明してください
_Victorique__

2019/03/02 12:39

tを加えたコードを示してください
guest

回答1

0

フローの流れとしてはイベントキューにイベントがたまっていないかを確認→あればイベントを処理、画面を描画、の順番で処理しているということでしょうか?

質問にあるコードの場合、フローの流れはおっしゃる通りです。

ただし、処理の順番は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のときに実行される「ある処理」の部分に問題がある可能性があります。そちらのコードの検証が必要かと思われます。

長文になりましたが、ご参考になれば幸いです。

投稿2019/04/08 13:55

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問