テキストの書式整形¶
Screen の draw.text()
メソッドはテキストの表示位置や書式をできる様々なオプションを備えています。以下はそのサンプルです
screen.draw.text("Text color", (50, 30), color="orange")
screen.draw.text("Font name and size", (20, 100), fontname="boogaloo", fontsize=60)
screen.draw.text("Positioned text", topright=(840, 20))
screen.draw.text("Allow me to demonstrate wrapped text.", (90, 210), width=180, lineheight=1.5)
screen.draw.text("Outlined text", (400, 70), owidth=1.5, ocolor=(255,255,0), color=(0,0,0))
screen.draw.text("Drop shadow", (640, 110), shadow=(2,2), scolor="#202020")
screen.draw.text("Color gradient", (540, 170), color="red", gcolor="purple")
screen.draw.text("Transparency", (700, 240), alpha=0.1)
screen.draw.text("Vertical text", midleft=(40, 440), angle=90)
screen.draw.text("All together now:\nCombining the above options",
midbottom=(427,460), width=360, fontname="boogaloo", fontsize=48,
color="#AAFF00", gcolor="#66AA00", owidth=1.5, ocolor="black", alpha=0.8)
基本的な使い方は簡単です。 screen.draw.text
に表示したいテキストとその位置を指定するだけです。位置は2番目の引数として(テキストの左上隅の)座標で指定します。そのほか後述するキーワードを使った指定も可能です
screen.draw.text("hello world", (20, 100))
screen.draw.text
には次のように様々なオプションのキーワード引数も指定できます。
フォント名とサイズ¶
フォントは fonts
という名前のディレクトリからロードされます。これは images や sounds と同様の仕組みです。なおサポートしているフォントの形式は .ttf
です。たとえばこのように指定します
screen.draw.text("hello world", (100, 100), fontname="Viga", fontsize=32)
fontname
: 表示に使うフォント・ファイルの名前です。特に指定の無いときは、デフォルトでシステム・フォントを使用します。fontsize
: フォントのサイズをピクセル数で指定します。デフォルトは24ピクセルです。antialias
: アンチエイリアスを使用するかどうかの指定です。デフォルトはTrue
で使用します。
色と背景色¶
screen.draw.text("hello world", (100, 100), color=(200, 200, 200), background="gray")
キーワード引数は次の通りです。
color
: 文字の色を指定します。デフォルトはwhite
です。background
: 文字の背景色を_指定します。デフォルトはNone
で「無し」です。
color
(そのほか background
、 ocolor
、 scolor
, gcolor
なども)色は (赤, 緑, 青) のシーケンス、たとえば (255,127,0)
のように指定します。そのほか
"orange"
のような pygame.Color
オブジェクトのカラー名、 "#FF7F00"
のような HTML の16進数文字列、または "0xFF7F00"
のような16進数文字列を使っての指定も可能です。
background
には None
を指定することもでき、その場合背景は透明になります。pygame.font.Font.render
とは違い、 screen.draw.text
を呼び出すたびに背景色を指定するのは効率が良くありません。実際に必要な場合だけ背景色を指定するようにしてください。
色の透明度をアルファ値で指定する方法はサポートされていません(ただしアウトラインまたはドロップシャドウを持つ見えないテキストは例外です。これは後で解説します)。透明度についてはキーワード引数 alpha
の項を読んでください。
位置指定¶
screen.draw.text("hello world", centery=50, right=300)
screen.draw.text("hello world", midtop=(400, 0))
使用できるキーワード引数は次の通りです。
top left bottom right
topleft bottomleft topright bottomright
midtop midleft midbottom midright
center centerx centery
位置指定のキーワード引数の使い方は pygame.Rect
の位置指定プロパティと同様です。ボックスの横の位置と縦の位置に対応する2つの引数を指定するか、または両方の指定を単一の引数で渡します。
位置が過剰に指定されている(たとえば、 left
と right
の両方が指定されている)場合、余分な指定は(任意に、しかし決定論的に)無効にされます。「制約付きテキスト」については、後述の screen.draw.textbox
を参照してください。
ワードラップ¶
screen.draw.text("splitting\nlines", (100, 100))
screen.draw.text("splitting lines", (100, 100), width=60)
キーワード引数は以下の通りです。
width
: テキスト表示に使う最大幅をピクセル数で指定します。デフォルトはNone
です。widthem
: テキスト表示に使う最大幅をフォントの em で指定します。デフォルトNone
です。lineheight
: 行の間隔をフォントのデフォルトの行間を単位に指定します。 デフォルトは1.0
です。
screen.draw.text
は改行文字 \n
で常に改行します。 width
や
widthem
が指定されている場合は、どの行もその幅を越えないように折り返そうとします。しかしすべての行のテキストが必ず指定された幅に収まるとは限りません。折り返しは空白文字のところでしかできないためです。ですから、空白を含まない長い単語があると、折り返せなくなってしまいます。アウトラインとドロップシャドウも考慮されないため、指定の幅を越えて表示される可能性があります。
スペースでの折り返しを抑制したいときはノーブレークスペース(\u00A0
)を使っ
てください。
テキスト・アライメント¶
screen.draw.text("hello\nworld", bottomright=(500, 400), align="left")
キーワード引数は以下の通りです。
align
: 行がお互いに配置される水平位置を指定します。デフォルトはNone
です。
align
は複数の行を表示する際の、お互いの行が配置される水平位置を決定します。指定できる値は文字列 "left"
, "center"
, または "right"
です。数値を使って 0.0
(左寄せ) から 1.0
までの値を指定することもできます。さらに None
も指定できます。
align
に None
を指定した場合の水平位置は、他の引数の内容に左右されます。位置指定の引数(topleft
, centerx
など)、 anchor
の設定に影響を受け、最終的なデフォルトは "left"
となります。
通常はデフォルトの配置を使い、どうしてもバランスが悪く見えてしまうときにだけ
align
を使うことをお勧めします。
アウトライン(文字の縁取り)¶
screen.draw.text("hello world", (100, 100), owidth=1, ocolor="blue")
キーワード引数は以下の通りです。
owidth
: 文字のアウトラインの太さを指定します。デフォルトはNone
です。ocolor
: アウトラインの色を指定します。デフォルトは"black"
です。
owidth
を指定すると文字にアウトラインが付きます。アウトライン処理はあまり細かに行われないため、文字サイズを大きくするとおそらく見た目が悪くなります。
owidth
の値は 1.0 としたときにちょうどよく表示されるようになっています。フォントサイズを 24 で割った値がその単位です。
特別なケースとして、アウトラインを使用する際、 color
に透明な値(たとえば
(0,0,0,0)
) を指定するとテキストが見えなくなり、文字の中が空になったアウトラインだけが表示されます(この機能は後述の gcolor
との互換性はありません)。
ocolor
に指定できる色の値は color
と同じです。
ドロップシャドウ¶
screen.draw.text("hello world", (100, 100), shadow=(1.0,1.0), scolor="blue")
キーワード引数は以下の通りです。
shadow
: ドロップシャドウを表示するオフセット座標 (x,y) を指定します。デフォルトはNone
です。scolor
: ドロップシャドウの色を指定します。デフォルトは"black"
です。
shadow
を指定すると文字にドロップシャドウが表示されます。引数にはオフセット座標の x と y の値をタプルで指定します。数値は正の値、負の値、0 の何れも使用可能です。たとえば
shadow=(1.0,1.0)
の場合、テキストの右下に影が付きますが、shadow=(0,-1.2)
にすると、影はテキストの上に表示されます。
shadow
の値は 1.0 としたときにちょうどよく表示されるようになっています。フォントサイズを 18 で割った値がその単位です。
特別なケースとして、ドロップシャドウを使用する際、 color
に透明な値(たとえば
(0,0,0,0)
) を指定するとテキストが見えなくなり、影だけが表示されます(この機能は後述の gcolor
との互換性はありません)。
scolor
に指定できる色の値は color
と同じです。
グラデーション¶
screen.draw.text("hello world", (100, 100), color="black", gcolor="green")
キーワード引数は以下の通りです。
gcolor
: グラデーションを停止するときの色を指定します。デフォルトはNone
です。
テキストに垂直方向のグラデーションを付ける場合は gcolor
を指定します。テキストの色は上端が color
で下端が gcolor
になります。グラデーションの停止位置と方向はハードコードされているため、変更することはできません。
アルファ値を使った透明度指定¶
screen.draw.text("hello world", (100, 100), alpha=0.5)
キーワード引数は以下の通りです。
alpha
: 0 から 1 までのアルファ値を使って透明度を指定します。デフォルトは1.0
です。
透明表示の際、キャッシュを使い値の再利用を最大化するため、alpha
の値は丸められます。
アンカーを使った配置¶
screen.draw.text("hello world", (100, 100), anchor=(0.3,0.7))
キーワード引数は以下の通りです。
anchor
: タプルの2つの要素でそれぞれ垂直と水平のアンカーを指定します。デフォルトは(0.0, 0.0)
です。
位置指定のキーワード引数を指定しない場合、anchor
を使ってテキストをどのように配置するか指定できます。anchor
の2つの値にはそれぞれ 0.0
から 1.0
までの任意の値を指定できます。 anchor
の値 (0,0)
はデフォルトで、テキストの左上が座標の位置になります。値を (1,1)
としたときは、テキストの右下が座標の位置になります。
回転¶
screen.draw.text("hello world", (100, 100), angle=10)
キーワード引数は以下の通りです。
angle
: 時計回りの回転角度を指定します。デフォルトは0
です。
回転させたときの Surface の位置指定は厄介です。回転したテキストを描画するとき、実際に指定した位置はアンカーとして固定され、テキストはその周りを回転することになります。たとえば、テキストの左上の座標を (100, 100)
にして角度を 90
にした場合、実際には Surface の左下を (100, 100)
にして描画されることになります。
これが分かりにくいようだったら、アンカーがテキストの中心に指定してみてください。アンカーをテキストの中心にすれば、いくら回転させても常にテキストの中心で変わることはありません。
回転させた Surface の描画の際は、キャッシュを使い値の再利用を最大化するため、angle
の値は 3 の倍数に丸められます。
テキストのサイズ制限¶
screen.draw.textbox("hello world", (100, 100, 200, 50))
screen.draw.textbox
には2つの引数を指定します。ひとつは描画するテキストで、もうひとつは pygame.Rect
オジェクト、あるいは Rect と同じように x 座標、y 座標、幅、高さの値を要素に持つタプルで指定します。フォントのサイズは範囲内に収まる最大のものが自動的に選択されます。 fontsize
と位置指定を除き、 screen.draw.textbox
には screen.draw.text
と同じキーワード引数が指定できます。