前回のブログでPygameでダウンロードした外部フォントを使用する方法を紹介しました。
外部ファイルを使用した際、外部ファイルを読み込めずに日本語が四角で表示されてしまう状況に悩まされていました。フォントファイルの場所をしっかり指定しているのにもかからわず以下のような表示になりました。
ダウンロードした日本語が文字化けして四角で表示される😅
フォントのダウンロード
まずはフォントをダウンロードします。
無償でダウンロードや利用が出来るフォントは「無料 日本語フォント ダウンロード」と検索するとダウンロードサイトに飛ぶことができます。作成物のテーマにあったフォントをダウンロードしてください。
今回はIPAフォントを利用します。
フォントデータの配置
フォントは相対パスで選択します。わかりやすいように今回はPythonプログラムと同じ場所に配置してください。
問題のコード
私が悩まされた問題はPygameにもフォントファイルにも問題は無く、私のコードがミスしていました。ミスしたコードがこちらです。
- import pygame
- WINDOW_WIDTH = 600
- WINDOW_HIGHT = 100
- FONT_PATH = "ipaexg.ttf"
- moji = "♪ みんなで歌おう ♪"
- pygame.init()
- text_font = pygame.font.SysFont (FONT_PATH, 50)
- screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HIGHT))
- screen.fill((255, 255, 255))
- text_r = text_font.render(moji, True, (255,255,255),(55,55,55))
- w,h = text_r.get_size()
- screen.blit(text_r, (WINDOW_WIDTH / 2 - w/2, WINDOW_HIGHT / 2 - h/2))
- pygame.display.flip()
- LOOP = True
- while LOOP:
- for event in pygame.event.get():
- if event.type == pygame.QUIT: LOOP = False
こちらのコードはミスがあるのですがエラーは発生しません。
先程の写真と同じ物ですが、実行すると日本語がすべて四角で表示されてしまいました。
今回の問題
今回は10行目の
text_font = pygame.font.SysFont (FONT_PATH, 50)
に問題がありました。
フォントの読み込みと文字描写を行う為のpygameモジュールであるpygame.fontには
システムフォントからフォントオブジェクトを生成するpygame.font.SysFontと
フォントファイルからフォントオブジェクトを生成するpygame.font.Fontがあったのです。
10行目の
pygame.font.SysFont (FONT_PATH, 50)
を
pygame.font.Font (FONT_PATH, 50)
に書き換えた所、
写真のようにダウンロードしたフォントファイルが利用出来るようになりました。
pygame.font.SysFontは第一引数に入力したフォントの条件に合わない場合はデフォルトのフォントが使用される為、エラーが出ずに実行できてしまったようです。
最終的なコード
前回のブログも更新を行いましたが、外部フォントを使用する為の最終的なプログラムは以下の通りになりました。
- import pygame
- WINDOW_WIDTH = 600
- WINDOW_HIGHT = 100
- FONT_PATH = "ipaexg.ttf"
- moji = "♪ みんなで歌おう ♪"
- pygame.init()
- text_font = pygame.font.Font (FONT_PATH, 50)
- screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HIGHT))
- screen.fill((255, 255, 255))
- text_r = text_font.render(moji, True, (255,255,255),(55,55,55))
- w,h = text_r.get_size()
- screen.blit(text_r, (WINDOW_WIDTH / 2 - w/2, WINDOW_HIGHT / 2 - h/2))
- pygame.display.flip()
- LOOP = True
- while LOOP:
- for event in pygame.event.get():
- if event.type == pygame.QUIT: LOOP = False
実行する前に6行目のFONT_PATH=””の中身をダウンロードしたフォントのファイル名(拡張子含む)に変更してください。
コメント