私はコードをもっている:
# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
screen.blit(text, [SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2])
Javaのようにテキストの幅と高さのメソッドを取得して、次のようにテキストを中央揃えにするにはどうすればよいですか。
screen.blit(text, [SCREEN_WIDTH / 2 - text_w / 2, SCREEN_HEIGHT / 2 - text_h / 2])
これが不可能な場合、別の方法は何ですか? this の例を見つけましたが、よくわかりませんでした。
レンダリングされたテキスト画像のサイズは、text.get_rect()
を使用して取得できます。これにより、特にwidth
属性とheight
属性を持つ Rect オブジェクトが返されます(完全なリストについては、リンクされたドキュメントを参照してください)。つまりtext.get_rect().width
を実行するだけです。
テキストの長方形をつかむときは、いつでも中央に配置できます。
# draw text
font = pygame.font.Font(None, 25)
text = font.render("You win!", True, BLACK)
text_rect = text.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
screen.blit(text, text_rect)
ちょうど別のオプション
レンダリングされたテキストは、Pygameの透明な表面でブリットされます。したがって、ここで説明するサーフェスクラスのメソッドを使用できます: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_width
したがって、次のことが機能します。
text.get_width()
text.get_height()
私はこの2つの方法を使って中央に書きました
import pygame
from pygame.locals import *
pygame.init()
pygame.font.init()
SURF = pygame.display.set_mode((600, 400))
# font object..................................
def create_font(t,s=72,c=(255,255,0), b=False,i=False):
font = pygame.font.SysFont("Arial", s, bold=b, italic=i)
text = font.render(t, True, c)
textRect = text.get_rect()
return [text,textRect]
# Text to be rendered with create_font
game_over, gobox = create_font("GAME OVER")
restart, rbox = create_font("Press Space to restart", 36, (9,0,180))
centerx, centery = SURF.get_width() // 2, SURF.get_height() // 2
gobox = game_over.get_rect(center=(centerx, centery))
rbox.center = int((SURF.get_width() - restart.get_width())//2), restart.get_height()
loop = True
clock = pygame.time.Clock()
while loop == True:
SURF.fill((0,0,0))
x, y = pygame.mouse.get_pos()
SURF.blit(game_over, gobox)
SURF.blit(restart, rbox.center)
for e in pygame.event.get():
if e.type == QUIT:
loop = 0
pygame.display.update()
clock.tick(60)
pygame.quit()