Pygame のImportとDisplayとループ、そしてQuit

個人学習のNoteです。初心者向けにPythonの基本部分を紹介しています。

§パッケージ >Pygame >Pygame の設定・表示・ループ・終了


 Pygame はPython のゲーム開発環境用の外部パッケージの一つ。Pygame パケージのPCへのインストールと、プログラムでのインポートが必要です。

 Pygame 詳細は開発元のdocumentationを参照下 https://www.pygame.org/docs/

* Pygame のimport と初期化( init )

 最初にPygem をインポートして初期化します。原則、Pygame は初期化が必須です。 Program_1 の実行でPygamen が黒いdisplay Surfaceを表示します。 表示された画面をインスタンスとして変数scrに代入して、以降はdisplay Surface として使用します。 

【 program_1 に関連する pygame  】 ( ->は実行時の戻値)

pygame.init() -> (numpass, numfail) : 初期化モジュール。pygame は初期化してから使う。戻値は初期化したモジュールの成功数numpass,と失敗数numfail。初期化なしで動作するメソッドもある(init 自体など)。
pygame.display : ウインドウやスクリーンの表示を制御するモジュール。Pygame は1つのdisplay Surfaceに描いた画像だけが表示できる。display Surface への描画はそのままdisplay 標示画像になる。その他のSurface 上の描画はdisplay Surface 上に転載しないと表示されない。

pygame.display.set_mode(size=(0, 0)) -> Surface : 表示画面の大きさ(幅、高さ)をpygameの ドット数で指定するモジュール関数。戻り値で表示画面(display Surface)を設定する。PC上には黒いpygame 画面が表示される。

Surface : Pygame で使用する描画のための表面インスタンスを示す総称。Pygame の解説や紹介で使用している。Pygame のクラスとして生成や表示などのメソッドがある。変数やインスタンス名としてSurface やsurface を使えるが、混乱するので使わない方がいい。 

【 Program_1 ・Program_2 の実行で表示されるdisplay Surface 】

* Pygame のLoopと終了

  program_1をPython IDLEで実行すると黒い枠を標示して止まります。program_1ファイルの直接実行では黒い枠が表示されてすぐ消えます。pythonが自動的に終了したためです。

 ゲームプログラミングはゲームを楽しむ人に処理速度を合わせたり、PC操作で終了するようにします。このため、プログラムが終わらない、稼働を続けるフローが必要です。プログラムが自動的に終らないようにした場合には、その対応としての終了操作が必要となります

 Pygam をWhile ループで継続的に実行させながら、Pygame ウインドウの右上にあるx記号のクリックをした場合に、While ループによる継続実行化から抜け出して、pygame を終了させるのがProgrm_2 です。pygame で繰り返して更新する処理は、このループ中に記載します

【 program_2 に関連する pygame  】  ( # pygame ループとshell終了判定の後)
pygame.event.get() -> Eventlist : イベントキューからイベントをリストにして取り出す。取り出した後のイベントキューは空になる。 イベントキューは処理待ちデータの行列のこと。 
pygame.QUIT : 終了Eventを特定する種類識別子。Event.typeを使用して得たイベント種類が同じなら終了Eventとなる。 Pygame ウインドウの右上xで終了Eventが発生する。

pygame.time.Clock().tick(framerate=0) -> milliseconds : 時計を更新する。引数にフレームレート(1秒単位での更新回数)を設定することで、Pygame の動きを遅くすることが出来、CPU の占有時間を短くすることもできる。

* その他のPygame Loopの終了方法

 上記のprogrm_2 はrunning 変数をループ条件にした標準的なwhile ループによる構成でした。 ここで、変則的なループを紹介しておきます。 

 〇 pyagame の初期化状態をループ条件に設定 : pygame 終了後にはpygame のコマンドが使えないので、ループ処理は終了判定・終了の処理より先に実行されるようになる。

【 program_3 に関連する pygame   】

pygame.get_init() -> bool :  pygame の現在の初期化状態を得る。戻り値はブール代数で初期化はTrue、初期解除はFalse。

 〇 while 条件式をイベントのリストで判定 : 終了イベントの発生を内包表示リストにして、リストの空判定を利用すると、最も少ない行でwhile ループを作ることも出来る。 プログラム行を少なくするには有効。


* 描画と画面の更新

 Pygame の開始と終了が設定出来たので、いよいよ本命の描画に移ります。初期化と終了処理の間で描画のコードを記載します。実行中に変らないものは初期化の後、whileループの前に描画を行い、変化する画はwhileループ中で描画することになります。 描画した後で画面の更新をしないと表示は変化しないので、flipメソッドで更新します。 

 タイトル(caption)と基本的の図形描画をwhileループの前で描画する固定画を描いたのが次のProgrm_5です。

【 program_5 に関連する pygame 】 ( # キャプション、図形、画面更新の追加部分)
pygame.display.set_caption(title) -> None : Pygaem ウインドウの名前を引数に変更します。
pygame.draw.rect(Surface, color, rect) -> Rect : 四角を指定したSurfaceに描く。色は名称又はRGB配色のタプルで指定。引数rect で[開始x,開始y,x幅,y幅 ]を指定する。 引数パラメータで線幅、角の丸みなどが設定可能。返り値は描画の位置とサイズのRect書式。
pygame.draw.circle(Surface, color, center, radius) -> Rect: 円を指定したSurfaceに描く。色は名称又はRGB配色のタプルで指定。中心位置、半径の引数が必要。 引数パラメータで線幅や4分の1円の設定が可能。返り値は描画がちょうど入る四角範囲の位置とサイズのRect書式。
pygame.draw.polygon(Surface, color, points) -> Rect : 多角形を指定したSurfaceに描く。色は名称又はRGB配色のタプルで指定。多角形のコーナの位置を順番に(x,y)タプルで示す。コーナー位置指定は3か所以上必要。引数パラメータで線幅設定が可能。返り値は描画がちょうど入る四角範囲の位置とサイズのRect書式。
pygame.display.flip() -> None : Pygame ディスプレイ全体を更新。 display Surface の描画は、ディスプレイの更新が無いと表示されない。ディスプレイを部分的に更新する場合は、display.update() を使用する。

【 Program_5 の実行で表示されるdisplay Surface 】


以上





IG.Python Note

PythonプログラミングのためのTips集です。 趣味のPythonプログラミングをしていると、必要なプログラミング情報を自分で取集することが必要になります。 集めた情報を整理しておくと便利なので、個人的な学習メモとして記録を作りました。

0コメント

  • 1000 / 1000