はじめに
pythonのゲーム用ライブラリpygameでちょっとしたゲームを作成したのだが、文字列の位置合わせに若干時間を要してしまったのでまとめた。
環境
次の環境で確認
- pygame V2.5.2
- Python V3.9.13
- Windows 10 Pro (64bit) 22H2
pygameモジュールのバージョンを確認するコマンド
python3 -m pip show pygame
フォントを指定して文字列を表示する
以下のプログラムを実行すると
import pygame
BLACK = (0,0,0) # 黒色
RED = (255,0,0) # 赤色
WHITE = (255, 255, 255) # 白色
WIDTH = 320 # 画面の横幅
HEIGHT = 240 # 画面の高さ
X = WIDTH/2 # 基準点(X座標)= 画面の中央
Y = HEIGHT/2 # 基準点(Y座標)= 画面の中央
FONTNAME = None # デフォルトフォント(日本語不可なので注意)
FONTSIZE = 40 # フォントサイズ
POINTSIZE = 5 # 基準点のサイズ
STRING = 'Text' # 表示する文字列(日本語不可)
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
font = pygame.font.SysFont(FONTNAME, FONTSIZE)
text = font.render(STRING, False, BLACK, WHITE) # 黒文字、白背景にする
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: # 閉じるボタンが押された時
pygame.quit() # プログラム終了
screen.fill(BLACK) # 画面をクリア
screen.blit(text, (X, Y)) # 基準点を指定して文字列描画
pygame.draw.circle(screen, RED, (X, Y), POINTSIZE) # 基準点を描画
pygame.display.update() # 画面更新
clock.tick(30)
次のような画面が表示される
フォントを指定して文字列を表示しているのだが、以下の行で基準点(赤丸、画面中央)を指定しているので基準点の右下(文字列の左上を起点)に文字列が表示されている。
screen.blit(text, (X, Y)) # 基準点を指定して文字列描画
基準点の右下以外に文字列を表示したい場合(例えば、箱の左側に文字列を表示したい、等)は、get_rect()
を使用してパラメータに「topleft
(左上)」「topright
(右上)」「bottomleft
(左下)」「bottomright
(右下)」「center
(中央)」 等を指定すればよい。
例えば、基準点の左上(文字列の右下を起点)に文字列を表示したい場合は、先ほどの行を変更すればよい
(変更後)
text_rect = text.get_rect(bottomright=(X, Y))
screen.blit(text, text_rect)
文字列の位置合わせの考え方
文字列の位置合わせをするときは「文字列のどの位置
を基準点
に合わせるか」を指定する。一般的に使われる「右よせ」「左寄せ」、「上寄せ」「下寄せ」と同じになる。(難しく考えずに素直に考えればよい)
「基準点
に対して文字列をどの方向に
合わせるか」ではないので注意
基準点
を基準に考えるか、文字列
を基準に考えるかの違いなのだが、とにかく文字列基準
と覚えておけばよい。