Pygameを使って文字を表示してみよう
前回はPygameを使って画面を作成するところまで説明しました。
今回は作成した画面に文字を表示させてみましょう。
ベース画面を作成する
まず、文字を表示するためのベース画面を作成します。
これは前回説明した pygame.display.set_mod() を使います。
今回は表示する画面(surface)を戻り値で取得しています。
実行例
surface = pygame.display.set_mode((640,400))
フォントオブジェクトを作成する
次に文字を表示するためにフォントオブジェクトを作成します。
ここではフォントの種類とサイズを定義します。
pygame.font.Font(ファイル名, サイズ)
ファイル名は、Windows10の場合 C:¥Windows¥Fonts 配下にあるフォントファイルを指定します。
Noneを指定するとPythonのデフォルトフォントが使用されます。
サイズは、ピクセル単位のフォントの高さです。
戻り値はフォントオブジェクトです。
以下の例は、フォントはメイリオ、サイズは40ピクセルを指定しています。
実行例
font = pygame.font.Font("C:¥Windows¥Fonts¥meiryo.ttc", 40)
メモ
ファイルのパス名は「/Windows/Fonts/ファイル名」のように/(スラッシュ)でも認識されます。
フォントオブジェクトを作成する方法として、pygame.font.SysFont()を使うこともできます。
詳しくは、以下の記事を参照してください。
表示する文字を定義する
フォントオブジェクトを作成したら、そのオブジェクトに対して表示する文字や文字色などを定義します。
フォントオブジェクト.render(テキスト, アンチエイリアス, 文字色, background=背景色)
テキストは、画面に表示する文字列です。
アンチエイリアスは、文字の角を滑らかにするかどうかをTrueかFalseで指定します。
文字色と背景色は、RGB(赤、緑、青)をそれぞれ 0~255 の範囲で指定します。
(0,0,0)にすると黒、(255,255,255)にすると白になります。
戻り値はテキストを表示する画面オブジェクトです。
以下の例は、テキストは「Hello World」、アンチエイリアスはTrue、文字色は白、背景色は緑を指定しています。
実行例
text = font.render("Hello World", True, (255,255,255), (0,255,0))
文字を画面に表示する
テキストを表示するための画面オブジェクトを作成したら、最初に作成したベース画面に、表示するテキスト画面を重ねます。
ベース画面オブジェクト.blit(テキスト画面オブジェクト, 表示座標, area=表示エリア, special_flags=色合成)
テキスト画面オブジェクトは、フォントオブジェクト.render()で作成したオブジェクトを指定します。
表示座標は、画面に表示する位置をテキスト画面の左上を基準に指定します。
表示エリアは、テキスト画面オブジェクトの一部だけを表示したい場合に指定します。
全て表示する場合は、引数に何も指定しないか、Noneを指定します。
色合成は、ベース画面の色とテキスト色や背景色を合成するための指定方法です。
色を合成しない場合は引数に何も指定しないか、0を指定します。
以下は、色合成の種類です。
色合成の種類
BLEND_ADD, BLEND_SUB, BLEND_MULT, BLEND_MIN, BLEND_MAX, BLEND_RGBA_ADD, BLEND_RGBA_SUB, BLEND_RGBA_MULT, BLEND_RGBA_MIN, BLEND_RGBA_MAX, BLEND_RGB_ADD, BLEND_RGB_SUB, BLEND_RGB_MULT, BLEND_RGB_MIN, BLEND_RGB_MAX, BLEND_PREMULTIPLIED
BLEND_RGBA_* は、透明度も含めて合成します。
なお、BLEND_RGB_* は BLEND_* のエイリアスで、内容は同じです。
メモ
色合成に関して若干補足すると、例えばベース画面の色が(50,0,200)で、重ねる画面の色が(80,0,80)の場合、BLEND_ADDを指定すると色が(130,0,255)となります。
BLEND_ADDは二つの画面の色を 0~255 の範囲でRGBごとに足し算する指定です。
BLEND_SUBは引き算の指定で(0,0,120)、BLEND_MAXは二つの画面の最大値の指定で(80,0,200)となります。
合成した色がいくつになるかは、 画像オブジェクト.get_at((X座標,Y座標)) を使うと取得できます。
以下の例は、表示する文字列が画面の中央に来るように、テキスト画面(text)の左上の位置を横208ドット、縦169ドットを指定しています。
全てのテキスト画面領域を使って、色も合成しないので、第3引数の表示エリアと第4引数の色合成は指定しません。
実行例
surface.blit(text, (208,169))
メモ
表示するテキスト領域のサイズは、「フォントオブジェクト.size(文字列)」で取得できます。
画面を更新する
ベース画面にテキスト画面を重ねたら、画面を更新します。
pygame.display.update()
画面を更新することによって、テキスト画面が表示されます。
画面に文字列を表示するプログラム
上記のことをふまえて、文字列を表示するプログラムを書いてみましょう。
画面中央に「Hello World」と表示します。
前回と同様、エスケープ(ESC)キーを押すと画面が終了します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
### インポート import pygame from pygame.locals import * ### モジュール初期化 pygame.init() ### 画面設定 surface = pygame.display.set_mode((640,400)) ### 文字設定 font = pygame.font.Font("/Windows/Fonts/meiryo.ttc", 40) text = font.render("Hello World", True, (255,255,255), (0,255,0)) ### テキスト画面表示 surface.blit(text, (208,169)) ### 画面更新 pygame.display.update() ### 無限ループ while True: ### イベント処理 for event in pygame.event.get(): if event.type == KEYDOWN and event.key == K_ESCAPE: break else: continue ### whileループ終了 break ### 終了処理 pygame.quit() |
プログラムを実行すると、以下の画像が表示されます。