FrontPage  ページ一覧  検索  更新履歴  RSS  ログイン

Psychlops Wiki - 多言語文字表示 差分

  • 最後の更新で追加された部分はこのように表示します。
  • 最後の更新で削除された部分はこのように表示します。

サンプルはこちらでダウンロードできます。
http://psychlops.l.u-tokyo.ac.jp/download/BasicSamples/UTFtextSample.cpp


! 多言語文字の取り扱いについて step 1

多言語文字を表示するには、''Canvas.msg''関数に与える文字列をワイド文字( L"..." , Lつき二重引用符)で指定します。文字列を変数で扱うには、char*の代わりにwchar_t*を、std::stringの代わりに std::wstringを使います。文字列のレンダリングには時間がかかりますが、初めて表示するときに自動的にキャッシュします。キャッシュは古くなると自動的に破棄されます(現状10個まで)(空文字列を入れると強制終了が発生する場合がありますのでご注意ください)。


ASCII文字以外を入力する場合は、ファイルのエンコーディングをしかるべきものに設定する必要があります。
* gcc: UTF-8N
* VC9: UTF-16(BOM付きが望ましい)

{{code_color('cpp')}}
<<<
    wchar_t *esc_msg = L"ESCキーを押すと次に進みます。";
    std::wstring description1 = L"日本語表示例です";

    while(!Input::get(Keyboard::esc)) {
        display.clear();
        //(3) 表示
        display.msg(description1,100,70,Color::white);
        display.msg(L"スペースバーを押してください",100,100,Color::white);
        if(Input::get(Keyboard::spc, Keyboard::pressed)) {
            display.msg(esc_msg,100,130,Color::green);
        }
        display.flip();
    }
>>>


! 多言語文字の取り扱いについて step 2

多言語文字は、表示フォントを指定することができます。フォントフェースを指定する構造体を指定します。''Canvas.msg''関数などで使われるデフォルトフォントを変更するには、''Font::default_font''変数に新しいフォント構造体を指定します。フォントはインストールされていなければその環境標準のものになります。一般的にWindowsとMacOSXでは同じ名前のフォントはありませんので、注意してください。

{{code_color('cpp')}}
Font::default_font = Font(L"Arial", 20);

全詳細を指定する方法は以下の通りです。太さ、スタイル等は省略可能です。
* Font(サイズ@px, 太さ@int, スタイル@enum, フォント名@wchar_t);
* Font(フォント名@wchar_t, サイズ@px, 太さ@int, スタイル@enum);

{{code_color('cpp')}}
Font font1(L"Arial", 25, Font::bold, Font::italic);


! 多言語文字の取り扱いについて step 3

''Canvas.msg''で逐一レンダリングすると時間がかかるため、文字刺激を使った実験など文字表示時間がクリティカルな場合では、あらかじめ必要な分のキャッシュを作っておくことをお勧めします。これには''Letters''クラスを使います。''Canvas.msg''が手書き文字だとすると、''Letters''クラスはハンコを作ることに相当します。


# フォントフェースを指定する構造体(Font)を作る
# 1のフォント構造体と文字列を元にレンダリングし、Canvasにキャッシュする(キャッシュの管理クラスLettersを使用)
# 2でキャッシュした文字列をCanvasに渡し、座標と色を指定して描画する
の3ステップで行います。

!! 文字列のレンダリングとキャッシュ
:Letters(文字列@ワイド文字列, フォント@Font):このクラスを作成すると自動的にキャッシュされます。 フォントを省略するとデフォルトのフォントになります
{{code_color('cpp')}}
<<<
Letters let1(L"Space Barを押すと文字が変わります", Font(20, Font::bold));
Letters let2(L"矢印キーを押してください。配置が変わります。");
Letters let3(L"Push Z/X Key. Font \"Arial\" have only Latain characters. 日本語は日本語フォントが必要です.", font1);
>>>

!! 表示
:Letters.draw(Color): 指定の色で文字を表示します。

:Canvas.msg(Letters, x, y, Color, align):指定の場所と色、整列方向でキャッシュされた文字を表示します。

{{code_color('cpp')}}
<<<
let1.centering(Mouse::x, Mouse::y+30).draw(Color::green);
let2.move_to(Mouse::x, Mouse::y).draw(Color::white);
Display::msg(let3, 100, 100);
>>>