pygameの基本的なソースコード解説(中編)

はじめに

こんにちは。デジタルステーション習志野スタッフの荒井です。

今回の記事では、以前にのpygame導入の記事で紹介したサンプルプログラムについて、より詳しい解説をしていきたいと思います。

この記事では、11行目の関数から順に解説していきます。1~10行目の関数については、前編で紹介していますので、そちらもぜひご覧ください。

 

コードのおさらい

以前の記事では、以下のプログラムを書き、実行しました。

 

 

 

 

 

 

 

そして実行結果は、下記のようになります。

 

 

 

 

 

 

 

 

 

では今回の記事では、このコードで使われている関数などの意味を、一つずつ解説していきます。

 

11行目:pygame.display.set.caption()

この関数の引数は(title, icontitle=None)の二つとなっていて、pygameでウィンドウを生成するときに、この関数を使うことでウィンドウにタイトルをつけることが出来ます。

二番目の引数は、icontitle=Noneとなっていますが、これは「入力を省略した場合、アイコンタイトルは設定しない」という意味になります。アイコンタイトルは、入力することはあまり無いかもしれません。

 

14行目:screen.fill() [surface.fill()]

screen.fillは、Surfaceの色を一色で塗りつぶす関数です。

引数は(color, rect=None, special_flags=0)となっていて、colorの部分には、(赤, 緑, 青)や、(赤, 緑, 青, 透明度)などを代入することが出来ます。透明度の設定を適用するには、Surface側でSRCALPHAフラグを設定して、ピクセル単位での透明に対応させなければなりません。special_flagsの部分は、定数を入力することで様々なオプションをつけることが出来ますが、あまり使わないと思います。

ざっくり説明すると以上なのですが、補足として、今回使用しているサンプルコードでは「display Surface」という、同時に1つしか存在しない特殊なSurfaceクラスを、pygame.display.set.mode()を使って変数screenに代入しています。

そのため、screen.fillと入れることで、変数screenに格納されたSurfaceクラスのfillメソッドにアクセスすることが出来ています。

 

24行目:pygame.display.flip()

行が飛びますが、display関係はこれで最後なのでここで解説します。

pygame.display.flipは、display surface全体を更新する関数です。これをwhile文の中に入れておくと、ループ処理をしながら画面を更新することが出来るようになります。ゲームを作るときは、これをwhile文の最後に書くことで、毎フレーム画面を更新してくれるようになります。

 

ちなみに、今回のサンプルコードには書いていませんが、ゲームを作る場合はwhile文の最後にpygame.time.ClockオブジェクトのClock.tick()を使うと、簡単にフレーム数の制御ができるようになります。

Clock.tickの引数は(framelate=0)となっており、数値を代入することで、入力した数値以上のフレームレートにならないよう遅延を発生させることが出来ます。

そのため、例えばpygame.display.flip()とClock.tick(60)をwhile文の最後に入れることによって、毎秒最大60回のペースで実行されるwhile文が出来上がり、画面が毎秒60回更新されるようになります(60FPS)。

このwhile文が、大抵のゲームを作る際の基盤となります。

 

まとめ

今回はここで区切りたいと思います。

Surfaceやdisplayの設定については、ややこしい部分も多いですが、特にSurfaceは、今後ゲームを作る際に何度も出てくることになります。

徐々にややこしい部分も増えてきたかと思いますが、次回でサンプルコードの解説は終わる予定です。頑張って覚えていきましょう!

 

無料体験 いつでもお問い合わせ下さい

デジタルステーション習志野

〒274-0063 船橋市習志野台4-1-7 習志野駅前郵便局2F