メインループの概要と注意点
久々にpygame
今回はメインループの作り方と、ウィンドウを閉じさせる方法について。
メインループ
前回のループではwhile True:を利用してループを作りましたが、上のようにFalseを基準としてループを制御することもできます。
本文にはまず、EVENT1として、ユーザーの行動に対して反応するためのforループを書きました。ユーザーの行動をリストに反映させ、それに応じたイベントを起こすという仕組みです。
今のところ、中味はループを終了させるためにdoneの値を変化させるものだけです。
その次のsurface.fill(color)はそのまま、画面(surface)を色(color)で満たす(fill)ためのコマンドです。surfaceには自分で作成した画面を、colorにはあらかじめ自分で定義した色があればその引数を、なければRGB法で([50,50,50,])の様に指定します。
追記:surface.fill(color)は必ず描画の前に行うようにしてください。図形等を描いたのちにfillを行うと図形等は見えなくなります。
例えば○ surface.fill() → pygame.draw.circle 画面を塗りつぶした後に円を描く
× pygame.draw.circle →surface.fill() 描いた円もろとも画面を塗りつぶす
さらにその次は図形の描画です、簡単な図形ならpygameに備わった描画メソッドで作れます。特に説明することはないかな。
すべて書き終えたら、最後にpygame.display.flip()かpygame.display.update()で画面を更新し、変更を反映します。
おまけとして、描写速度の調整もしておきます。静止画を描写し続ける場合は書かなくても分かりませんが、アニメーションの作成時には大変重要な項目です。一秒間の描写回数を指定することで、アニメーションの速度を変化させます。これを指定しないと、常に最高速で処理を行うことになり、アニメーションは目に見えない速さで変化してしまいますのでご注意。
描写速度の指定にはpygame.time.Clock()を使います。clock=pygame.time.Clock()等と指定しておくと分かりやすいと思います。後はループ内でclock.tick(描写回数)と記述すれば完了です。
これを動作させれば、
さて、このディスプレイには重大なミスがあります。
このディスプレイ、閉じられません!!
試しに右上の×ボタンをクリックしてみると・・・一向にディスプレイが閉じる気配がありません。
ゲームを作ってるときは、ソースコードを閉じてしまえば一緒に閉じるのでまだいいですが、実際にプレイする時になってAlt+F4でないと閉じられないゲームになっていいわけがないので直しましょう。
やることはただ一つ。ループを抜けた後にウィンドウを閉じるためのコードを書くだけです。
上のコードでは×ボタンでループから抜けるコードは書きましたが、抜けた後のコードが書けていたために、「ループは抜けたけど、そのあとは何するの?」という状態になっていたのです。
このように最終行にpygame.quit()と記述するだけで、ウィンドウを閉じられるようになります。