>> 古い記事: クロスプラットフォームなノベルゲームエンジン Ren'Py の特徴とライセンス
<< 新しい記事: 邦訳: ドキュメンタリー番組「良いコピー悪いコピー」をダウンロードしよう

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

pygame - 日本語テキストを自動的に折り返して表示する

指定した横幅(ピクセル)に収まるように
自動的に改行して長い文字列を表示するサンプルです。
上の画像を見てもらえば分かると思いますが、
- 禁則処理などはせず単純に自動改行しているだけ
- プロポーショナルフォントでも大丈夫
- 英数字混じりでも大丈夫
です。

試してみる場合はスクリプトと同じディレクトリに VL-PGothic-Regular.ttf を置くか フォントのパスを書き換えてください。
それとスクリプトのエンコーディングは UTF-8 にしてください。

RyoN3 さんによる以下の記事を参考にし、コードを流用させてもらいました。 ありがとうございます。

Pygame入門 - 文字を表示しよう - 1. まずは表示する
http://www.halb-katze.jp/pygt/pygt0901.html
Pygame入門 - 文字を表示しよう - 2. 日本語を表示する
http://www.halb-katze.jp/pygt/pygt0902.html
Pygame入門 - 文字を表示しよう - 3. 改行してみる
http://www.halb-katze.jp/pygt/pygt0903.html
# -*- coding:utf-8 -*-

import pygame
from pygame.locals import *

SCR_W = 400 # 画面の幅
SCR_H = 320 # 画面の高さ

def init(size=(200,100), title='non title'):
    """initialize all and make surface using pygame.init()"""
    pygame.init()
    scr = pygame.display.set_mode(size)
    scrRect = scr.get_rect()
    pygame.display.set_caption(title)
    return scr

def main():
    screen = init((SCR_W, SCR_H), 'auto linefeed sample')

    # フォント名、サイズ
    font = pygame.font.Font( "VL-PGothic-Regular.ttf", 24) # フォント読み込み

    jstr = u"ふりかえってみると、Linux の手法や成功の前例は GNU Emacs の Lisp ライブラリと\
 Lisp コードアーカイブの開発にみることができる。Emacs の C のコア部分やその他 FSF ツールみたいな、\
伽藍建築方式にくらべると、Lisp コードのプールの進化は流動的で、すごくユーザ主導で行われた。(「伽藍とバザール」より)"

    blitx = 0
    blity = 0
    for c in jstr:
        # テキスト表示用Surfaceを作る
        # render(text, antialias, color)
        jtext = font.render( c, True, (255,255,255))

        # blit の前にはみ出さないかチェック
        if blitx + jtext.get_rect().w >= SCR_W:
            blitx = 0
            blity += jtext.get_rect().h

        # 貼り付ける文字列、貼り付ける場所
        screen.blit( jtext, (blitx,blity))

        pygame.display.flip() # 画面を反映

        blitx += jtext.get_rect().w

    while 1:
        for event in pygame.event.get(): # イベントチェック
            if event.type == QUIT: # 終了が押された?
                return

if __name__ == '__main__': main()
# end of file 
余談ですが
Ruby/SDL でも似たようなことができます。
テーマ:プログラミング - ジャンル:コンピュータ

>> 古い記事: クロスプラットフォームなノベルゲームエンジン Ren'Py の特徴とライセンス
<< 新しい記事: 邦訳: ドキュメンタリー番組「良いコピー悪いコピー」をダウンロードしよう
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。