LoginSignup
2
0

pygameでの文字列の位置合わせ

Last updated at Posted at 2024-03-19

はじめに

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)

次のような画面が表示される

3.jpg

フォントを指定して文字列を表示しているのだが、以下の行で基準点(赤丸、画面中央)を指定しているので基準点の右下(文字列の左上を起点)に文字列が表示されている。

    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)

(実行結果)
4.jpg

文字列の位置合わせの考え方

文字列の位置合わせをするときは「文字列のどの位置基準点に合わせるか」を指定する。一般的に使われる「右よせ」「左寄せ」、「上寄せ」「下寄せ」と同じになる。(難しく考えずに素直に考えればよい)

1.jpg

基準点に対して文字列をどの方向に合わせるか」ではないので注意

2.jpg

基準点を基準に考えるか、文字列を基準に考えるかの違いなのだが、とにかく文字列基準と覚えておけばよい。

参考情報

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0