Pygameでゲームを開発していると、スコアやメッセージなどのテキスト表示が必要になる場面が多々あります。テキストの表示は一見するとシンプルな作業に思えますが、実際にゲームに自然に溶け込むようなテキストを配置するには少し工夫が必要です。
この記事では、Pygameでのテキスト表示に必要な基本的な方法から、フォントの設定、色の変更、さらには動的なテキスト更新まで、実践的なテクニックを分かりやすく解説します。
Pygameのインストールと基本操作
Pygameのインストールについてはこちらから!
Pygameの基本的なコードについて分からなかったら以下の記事に戻ってみてね!
Pygameでテキストを表示する基本
サンプルコード
import pygame
pygame.init()
# 画面サイズを設定
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Pygameでテキストを表示する")
# フォントオブジェクトを作成
font = pygame.font.Font(None, 36) # デフォルトフォントを使用
# テキストをレンダリング
text = font.render("Hello, Python!", True, (255, 255, 255)) # 白色
# メインループ
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 背景を黒色に設定してからテキストを表示
screen.fill((0, 0, 0)) # 背景色を黒に設定
screen.blit(text, (50, 50)) # テキストの位置を指定して表示
pygame.display.flip() # 画面を更新
pygame.quit()
ここから詳しくコードを解説していくよ!
コードの解説
Fontオブジェクトを作成する
Pygameでテキストを表示するには、まずフォントを設定します。フォントにはシステムのデフォルトフォントを使う方法や、自分で用意したフォントファイル(ttfファイル)を読み込む方法があります。
import pygame
pygame.init()
# フォントオブジェクトの作成
font = pygame.font.Font(None, 36) # デフォルトフォントを使用
上記のコードで「None」はデフォルトのフォントを意味し、「36」はフォントサイズを指定しています。また、独自のフォントを使いたい場合には、以下のようにttfファイルを指定します。
font = pygame.font.Font("path/to/your/font.ttf", 36)
テキストのレンダリング
次に、テキストをレンダリングしてSurfaceオブジェクトとして作成します。このSurfaceは、画面に表示する画像やテキストの描画単位となります。
# テキストをレンダリング(色はRGB形式で指定)
text = font.render("Hello, Python!", True, (255, 255, 255)) # 白色
font.render()メソッドの第一引数は表示したいテキスト、第二引数はアンチエイリアスの設定(Trueで滑らかになります)、第三引数は文字の色をRGB形式で指定しています。
テキストを画面に表示する
次に、作成したSurfaceオブジェクト(text)を画面に表示します。blitメソッドを使って画面の指定した座標にテキストを配置します。
screen = pygame.display.set_mode((640, 480))
screen.fill((0, 0, 0)) # 背景を黒色に設定
screen.blit(text, (50, 50)) # 位置を指定して表示
pygame.display.flip() # 画面を更新
ここでは、テキストの左上の位置を(50, 50)に指定しています。pygame.display.flip()で画面の内容を更新することにより、テキストが表示されます。
日本語が文字化けしちゃう!っていう方は、次の記事で解決方法を紹介しています!
ぜひご覧ください!
応用編:テキストを動的に更新する
ゲームではスコアやタイマーなど、リアルタイムで変化する情報を表示することもあります。その場合は、ループ内でテキストを更新する必要があります。
import pygame
pygame.init()
# 画面サイズを設定
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Pygameでテキストを表示する")
# フォントオブジェクトを作成
font = pygame.font.Font(None, 36) # デフォルトフォントを使用
# テキストをレンダリング
text = font.render("Hello, Python!", True, (255, 255, 255)) # 白色
# メインループ
score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
score += 1 # スコアの増加(仮の例)
screen.fill((0, 0, 0)) # 背景を黒でリセット
# 更新されたスコアを表示
text = font.render(f"Score: {score}", True, (255, 255, 255))
screen.blit(text, (50, 50))
pygame.display.flip()
pygame.time.delay(1000) # 更新スピードの調整
pygame.quit()
このコードでは、score変数をリアルタイムで更新し、新しいスコアが表示されるようにループ内でfont.render()を呼び出しています。screen.fill((0, 0, 0))で背景をクリアしてから新しいスコアを表示するため、古いスコアが残らずに表示されます。
カラーの設定方法
Pygameでは、独自のフォントファイルやカラーを使ってテキストの見た目をアレンジすることができます。たとえば、色を変えるだけでもテキストが目立ちやすくなります。
import pygame
pygame.init()
# 画面サイズを設定
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Pygameでテキストを表示する")
# フォントオブジェクトを作成
font = pygame.font.Font(None, 36) # デフォルトフォントを使用
# テキストをレンダリング
text_color = (0, 255, 0) # 緑色
text = font.render("Hello, Python!", True, text_color)
# メインループ
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 背景を黒色に設定してからテキストを表示
screen.fill((0, 0, 0)) # 背景色を黒に設定
screen.blit(text, (50, 50)) # テキストの位置を指定して表示
pygame.display.flip() # 画面を更新
pygame.quit()
フォントファイルを指定することで、ゲームの雰囲気に合わせた独自のスタイルを簡単に追加することが可能です。また、テキストを点滅させたり、位置を動かすことで動的なエフェクトを加えることもできます。
テキストの配置を調整するテクニック
テキストの位置を中央に揃えたり、画面の右下に配置したりするのも重要なポイントです。以下は、テキストを中央に表示する例です。
import pygame
pygame.init()
# 画面サイズを設定
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Pygameでテキストを表示する")
# フォントオブジェクトを作成
font = pygame.font.Font(None, 36) # デフォルトフォントを使用
# テキストをレンダリング
text_color = (0, 255, 0) # 緑色
text = font.render("Hello, Python!", True, text_color)
# メインループ
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 背景を黒色に設定してからテキストを表示
screen.fill((0, 0, 0)) # 背景色を黒に設定
# テキストのサイズを取得して中央位置を計算
text_rect = text.get_rect(center=(screen.get_width() / 2, screen.get_height() / 2))
screen.blit(text, text_rect)
pygame.display.flip() # 画面を更新
pygame.quit()
テキストのSurfaceオブジェクトからget_rect()を使ってテキストの領域を取得し、そのcenter属性を画面の中央に設定することで、簡単に中央揃えが可能になります。
まとめ
Pygameでのテキスト表示は、ゲーム開発において欠かせない要素の一つです。基本的なテキストのレンダリング方法から、スコアの動的更新、カスタムフォントの使用方法、そしてテキストの位置調整までを網羅しました。テキスト表示の技術を習得すれば、より魅力的で分かりやすいゲームUIを構築できますので、ぜひ色々なテクニックを試してみてください。
コメント