
一つ前のページでは画面に画像を表示する方法について学習しました。
今回は 画面に文字を表示する方法 について見ていきましょう。
Chapter1:pygame入門|画面を表示しよう
・Chapter1-1:pygameを導入しよう
・Chapter1-2:ゲームループの基本を理解しよう
・Chapter1-3:画面に画像を表示しよう
・Chapter1-4:画面に文字を表示しよう ◁今回はここ
・Chapter1-5:画面上の画像を動かそう
Chapter2:簡単なノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう
Extra1:横スクロールのアクションゲームを作ろう
pygameを利用してゲームアプリを開発する際、画面に文字を表示する技術は、スコアの表示やゲーム内のメッセージをユーザーに伝えるために欠かせません。
しかし、pygameでは文字をそのまま描写することはできません。そのため、文字を画像として作成し、それを画面に描画するという方法を用いる必要があります。
本記事では、初心者向けに pygameでの文字表示の基本 を解説し、フォントの設定方法や描画処理の流れ、さらには 日本語を正しく表示するための注意点 についても詳しく紹介します。
まずは、pygameにおけるフォントの設定方法を学んでいきましょう。
pygameでテキストを表示する基本手順
pygame では、文字を画面に表示するために pygame.font
モジュールを使用します。
このモジュールを使うことで、フォントを設定し、文字を画像として作成し、画面に描画することができます。
フォント設定から描画までのステップ
文字を表示するための基本的な手順は以下のとおりです。
1.フォントの設定
コンストラクタpygame.font.Font()
を使用してフォントを作成します。
デフォルトのフォントを使う場合は、フォントの種類は None
とします。
font = pygame.font.Font(フォントの種類, 文字サイズ) # pygame.fontモジュールのFontクラスをインスタンス生成し、変数fontに代入
これにより、フォントを作成する準備が整いました。
2.文字の画像を作成
render()
メソッドを使って、文字を画像に変換します。
画像変数 = font.render(表示させたい文字列, True, 文字の色)
Trueは文字列を滑らかにする指定です。
3.画面に描写
blit()
メソッドを使用して、作成した文字の画像を画面上に描画します。
screen.blit(画像変数, (画像サイズ))
実例コードで見る文字表示の流れ
それでは、実際に pygame
を使って画面に文字を表示するプログラムを見てみましょう。
#1.初期化(ゲームの準備をする) import pygame, sys # pygameとsysをインポート pygame.init() # pygameを初期化 screen = pygame.display.set_mode((800,600)) # 画面の作成 # フォントの設定(デフォルトフォントを使用) font = pygame.font.Font(None, 50) # 文字サイズ50pxのフォントを作成 # "Hello!" のテキスト画像を作成(青色で描画) textimg = font.render("Hello!", True, pygame.Color("BLUE")) #2.メインループ while True: # 画面を白で塗りつぶす(背景色を白にする) screen.fill(pygame.Color("WHITE")) # 文字を画面に描画(座標 (200, 100) の位置に表示) screen.blit(textimg, (200, 100)) # 画面を更新(描画内容を適用) pygame.display.update() # イベント処理(ウィンドウを閉じる処理) for event in pygame.event.get(): if event.type == pygame.QUIT: # 閉じるボタンが押された場合 pygame.quit() # pygameを終了 sys.exit() # プログラムを終了
このコードを実行すると、白い背景の画面に「Hello!」という青色の文字が表示されます。
重要な部分を以下に解説します。
フォントの設定
font = pygame.font.Font(None, 50) # pygameライブラリのfontモジュールのFontクラスをインスタンス生成し、変数fontに代入
pygame.font.Font()
を使ってフォントを設定します。None
を指定するとデフォルトフォントが使用されます。50
は文字のサイズを表します(50px)。
テキスト画像の作成
textimg = font.render("Hello!", True, pygame.Color("BLUE")) # fontオブジェクト(変数font)のrenderメソッドを呼び出し、 # レンダリングされたテキストのオブジェクトを変数textimg に代入する
render()
メソッドを使い、"Hello!"
という文字の画像を作成します。True
を指定すると、アンチエイリアス(滑らかにする処理)が有効になります。pygame.Color("BLUE")
は、文字の色を青色にする指定です。
フォントサイズや色を自由に変更しよう
文字の色やサイズを変更する方法を学習しましょう。
文字のサイズは pygame.font.Font()
の第2引数で設定できます。また文字の色は、render()
の第3引数で変更できます。
例えば、以下のように異なるサイズや色のフォントを作成できます。
# 文字サイズを変更 small_font = pygame.font.Font(None, 30) # 小さい文字(30px) medium_font = pygame.font.Font(None, 50) # 標準サイズ(50px) large_font = pygame.font.Font(None, 80) # 大きい文字(80px) # 各フォントサイズの文字画像を作成 small_text = small_font.render("Small Text", True, pygame.Color("BLACK")) medium_text = medium_font.render("Medium Text", True, pygame.Color("RED")) large_text = large_font.render("Large Text", True, pygame.Color(128, 0, 128))
pygame.font.Font(None, サイズ)
のサイズ
を変更することで、文字の大きさを指定可能。pygame.Color("色の名前")
で色を指定すると、簡単に設定可能。pygame.Color((R, G, B))
のように RGB 値(0〜255)で細かく色を指定することも可能。
日本語を表示するには?エラー回避と対処法
これまでの章では、pygame.font.Font()
を使用して英語の文字を表示する方法を学びました。
しかし、pygame
のデフォルトフォントは日本語に対応していないため、そのままでは日本語の文字を表示することができません。
本章では、日本語フォントを使用して日本語の文字を表示する方法を解説します。
デフォルトで日本語が表示されない理由
pygame.font.Font(None, 50)
のように None
を指定すると、pygame
のデフォルトフォントが使用されます。
しかし、このフォントは英語などのアルファベットには対応していますが、日本語の文字には対応していません。
そのため、render()
を使用して日本語のテキストを描画しようとすると、文字が正しく表示されなかったり、空白になったりします。
試しに、先ほどのコードの「Hello!」の部分を「こんにちは!」に変えてみて下さい。文字化けして表示されるはずです。
日本語フォントの指定と読み込み方法
日本語を表示するためには、日本語フォントを指定する必要があります。
Windows や Mac には日本語フォントが標準でインストールされているので、それを読み込ませましょう。
フォント名 | 代表的なOS |
---|---|
msgothic.ttc | Windows(MS ゴシック) |
meiryo.ttc | Windows(メイリオ) |
ヒラギノ角ゴ ProN | macOS |
NotoSansCJK-Regular.ttc | Google のオープンソースフォント |
以下のように、日本語フォントのパスを指定することで、日本語を表示できます。
# 日本語フォントの指定(Windows の場合) font = pygame.font.Font("C:/Windows/Fonts/msgothic.ttc", 50)
まとめ
本記事では、pygame
を使用して画面に文字を表示する方法について学びました。
ゲーム開発において、文字を表示することはスコアや残り時間の表示、ゲームの説明など、プレイヤーに情報を伝える上で欠かせない要素です。
文字を表示できるようになったことで、スコア表示やメニュー画面の作成など、より実践的なゲーム開発へと進む準備が整いました。次回は、「画面上の画像を動かす方法」について学習し、ゲームの動きを作り出す方法を習得していきます。
お疲れさまでした!
ゲーム開発の楽しさを味わいながら、引き続き pygame
の学習を進めていきましょう!
FAQ|pygameで画面に文字を表示することに関するよくある質問
今回の記事に関する「よくある質問」とその解答について、以下の内容を参考にしてください。
- Q1. pygameでテキストを画面に表示するにはどのような手順が必要ですか?
-
まず
pygame.font
モジュールを使ってフォントオブジェクトを作成し、そのフォントでrender()
メソッドを使ってテキストサーフェスを生成します。最後に、そのサーフェスを
blit()
で画面に描画します。各ステップの具体的なコード例は本文で解説しています。
- Q2. 表示する文字のフォントやサイズはどのように変更できますか?
-
pygame.font.Font()
の第1引数にフォントファイルのパスを、第2引数にフォントサイズを指定することで、好きなフォントやサイズでテキストを表示できます。システムフォントを使う場合は
pygame.font.SysFont()
も活用できます。
- Q3. 画面上の好きな位置に文字を表示したい場合はどうすればいいですか?
-
テキストサーフェスの
blit()
メソッドで指定する座標(x, y)を調整することで、任意の位置に文字を表示できます。中央寄せや右寄せなど、レイアウト調整の方法も本文で紹介しています。
画面に文字を表示する際によくあるトラブルと解決法
今回の記事に関する「よくあるトラブル」とその原因、解決法について、以下の内容を参考にしてください。
文字がまったく表示されない
- トラブルの原因と対処法を見る
-
トラブルの原因
フォントの初期化やテキストサーフェスの生成、
blit()
の呼び出しが正しく行われていない場合によく発生します。特に、
pygame.font.init()
を忘れていたり、pygame.display.update()
(もしくはpygame.display.flip()
)が呼ばれていないことも原因です。トラブルの解決法
- コード内で
pygame.font.init()
やpygame.display.update()
が正しく実行されているか、抜けがないか一つずつ確認してください。 - さらに、テキストサーフェスを作成した後で
blit()
が画面に対して正しい座標で呼ばれているか確認しましょう。
- コード内で
エラー「pygame.error: font not initialized」が出る
- トラブルの原因と対処法を見る
-
トラブルの原因
pygame.font
モジュールの初期化を行っていない場合や、pygame.quit()
が意図せず呼ばれてしまった後にフォントを使おうとした場合に発生します。トラブルの解決法
- プログラム冒頭で
pygame.init()
やpygame.font.init()
が抜けていないかをコード全体でチェックしてください。 - また、
pygame.quit()
の呼び出しタイミングが不適切になっていないかも確認し、必要なタイミングまで呼び出さないよう注意してください。
- プログラム冒頭で
文字が意図しない場所に表示される、または画面外に出て見えなくなる
- トラブルの原因と対処法を見る
-
トラブルの原因
blit()
時の座標指定が不適切な場合や、ウィンドウサイズより大きな座標を指定してしまっていることが原因です。また、テキストサーフェスのサイズを考慮していない場合もあります。
トラブルの解決法
blit()
で指定している座標がウィンドウサイズ内に収まっているか、数値を確認しましょう。テキストサーフェスの
get_width()
やget_height()
を使い、表示位置やサイズが画面に合っているか一度見直してみてください。