Pygame のフォントとテキスト
ゲームではフォントも重要な役割を果たします。スコアの表示やキャラクター間の会話など。
Pygame のフォントは、True Type File の略である「.ttf」ファイルを使用します。
フォントとテキスト
pygame でフォントを使用するには、通常 2 つの異なる方法があります。
- pygame.font.Font()
- pygame.font.SysFont().
それらの違いは、pygame.font.Font() ではパラメーターとして渡すフォントのファイル パスが必要であるのに対し、pygame.font.SysFont() ではフォントの名前のみが必要であることです。
Pygame.font.Font()
pygame.font.Font() は主にシステム外のフォント ファイルを使用するために使用されます。たとえば、Python ファイルと同じディレクトリにファイル xx.ttf がある場合、次のコードでそれを使用できます。
pygame.font.Font("xx.ttf", 20)
最初のパラメータはファイル パス、2 番目のパラメータはフォント サイズです。
この明らかな利点は、選択したフォントが利用できない可能性がないことです。
もう 1 つの方法は、プログラムで最初からシステムのデフォルトのフォントを使用するようにすることです。この方法には 100% バグがなく、「フォントが見つからない」問題も発生しません。
font = pygame.font.Font(None, size)
システムのデフォルトのフォントはシステムによって異なることに注意してください。
指定したフォントの種類が見つからない、またはエラーが発生する場合があります。この場合、pygame はデフォルトのシステム フォントに戻ります。
Pygame.font.SysFont()
ttf ファイルを含めない場合は、pygame.font.SysFont() を使用できます。
良い戦略は、コードが実行されているシステムでサポートされているフォントを最初に見つけることです。pygame.font.get_fonts() 関数は、システム上で検出できるすべてのフォント名のリストを返します。Windows デスクトップでコードを実行すると、次の出力が表示されます。
['arial', 'arialblack', 'bahnschrift',
'calibri', 'cambriacambriamath', 'cambria',
......
]
システムが異なれば、出力結果も異なります。次に、1 つを選択して SysFont() 関数に渡すだけです。
システムフォントを使用する
chat_font = pygame.font.SysFont('arial', 15)
name_font = pygame.font.SysFont('Helvetica', 20)
game_over_font = pygame.font.SysFont('Verdana', 60)
SysFont() 関数には、ファイル パスではなく、フォントの名前のみが必要です。2 番目のパラメータは変更されず、フォント サイズを表します。
ご覧のとおり、いくつかの種類のフォントを作成しました。その理由は、通常のゲームでは、テキストのさまざまな部分にさまざまな種類のフォントが使用されるためです。ゲーム全体で同じ種類のフォント ファミリーとサイズを使用することは非常にまれです。
たとえば、かなり小さいフォント サイズを使用してダイアログ用のフォント タイプを作成しました。多くのゲームにある「GAME OVER」の文字は大きめのフォントを使用しました。名前には、テキストよりもわずかに大きいフォント サイズの別のフォントも作成しました(少し目立つように)。
chat = chat_font.render("Hey there, Beautiful weather today!",
True, (0,0,0))
name = name_font.render("John Hubbard", True, (0,0,255))
game_over = game_over_font.render("Game Over", True, (255,0,0))
フォントの定義は最初のステップにすぎません。次に、フォントを使用して Surface オブジェクトを作成します。レンダリング時に色を決定することもできます。True パラメータは、エッジを滑らかにするために使用されるアンチエイリアシングを表します。使用する場合は True を渡し、それ以外の場合は False を渡します。
screen.blit(dialogue, (40,40))
screen.blit(name, (40,140))
screen.blit(game_over, (40,240))
最後のステップは、オブジェクトを実際に画面上に表示することです。このために、surface.blit() 関数を使用します。
Pygame フォントの例
ここで、実際に上記のすべてのコードを包括的なプログラムに入れて、出力を示します。
私たちのプログラムのコード。
import pygame
pygame.init()
#定义颜色
CHAT_COLOR = (0,0,0)
NAME_COLOR = (0,0,255)
GAME_OVER_COLOR = (255,0,0)
screen = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()
chat_font = pygame.font.SysFont('arial', 15)
name_font = pygame.font.SysFont('Helvetica', 20)
game_over_font = pygame.font.SysFont('Verdana', 60)
chat = dialogue_font.render("Hello,nict to meet you!",True, CHAT_COLOR)
name = name_font.render("ubuntu", True,NAME_COLOR )
game_over = game_over_font.render("Game Over", True, GAME_OVER_COLOR)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill((255, 255, 255))
screen.blit(dialogue, (40,40))
screen.blit(name, (40,140))
screen.blit(game_over, (40,240))
pygame.display.flip()
clock.tick(60)