KLibでの文字列描画

KLib

KLibについては、まずこちらの記事を参照ください。




KLibで文字列を描画する機能をラベルといいます。

OpenGLで文字列を描画するのは何かと面倒ですが、

このラベルを使って文字列テクスチャを作成します。

ラベルを使うにあたって必要な事

  • 変数の用意
  • フォントの読み込み
  • 初期化
  • 終了処理の仕込み
  • 描画

変数の用意

#include "KLLabel.h"
#include "KLFont.h"

したあとに

KLLabel label;
KLFont  font;

のようにKLLabel型とKLFont型の変数を定義してください。
今回は省略しますが、実際にはシーンオブジェクト内に定義するといいと思います。
使いまわすならグローバル変数として定義してもいいでしょう。

フォントの読み込み

今回は以下のようにしてヒラギノゴシックW6を使ってみます。

KLFont_Load( &font, KLFont_name[KLFontType_HiraKakuProN_W6], 0 );

KLFont_nameは予めiPhoneに入っているフォント名が定義されたテーブルです。
KLFontType_***でそのインデクスを指定できます。

初期化

読み込んだフォントを使ってラベルを作成します。

KLLabel_Init(&label);
KLLabel_ToSprite(&label, "ABCDEテストの漢字使用可能", &font);

// フォントはもう使わないのでアンロード
KLFont_Unload(&font);

ラベルは都度テクスチャを作成するとコストがかかるので
使用する文字だけをあらかじめテクスチャにし、その文字を
組み合わせて文字列として描画します。

第二パラメータに使用する文字を予めセットします。
使用する文字の順番は関係ありません。
例えば、後で"ABC"と表示したい時は"ABC"でも"BCA"でも"CAB"でも問題ありません。

終了処理の仕込み

もうラベルを使わなくなるタイミング(シーンのアンロード等)に
ラベルアンロードを追加します。

KLLabel_Unload(&label);

描画

以下のようにして文字列を描画します。
KLLabel_ToSpriteの第二パラメータに定義していない文字は描画ないので注意してください。
フォントに含まれない文字も同様に定義しても描画できません。

char* str = "漢字可のテストDE使用";
KLLabel_Draw( &label, str, cstrlen(str), x, y, maxw, RGBA(0,0,0,255), KLLABEL_ALIGN_L );

第二パラメータに表示したい文字列、
第三パラメータに表示したい文字数(例えば3とした場合、"漢字可"までが表示されます)
別途変数を用意して毎フレーム+1していけば、1文字ずつ表示する事もできます。
なお、文字すべての長さを計りたい時は、strlenではなくcstrlenを使用します。
これは、char1byteが1文字とは限らず、全角文字は3〜4byteなど1文字あたり不定なためです。
strlenは文字数ではなくchar文字列の総byte数を返してしまうため実際の文字数と異なります。

第四・五パラメータに表示座標

第六パラメータは一定幅で折り返したい場合はその幅、0で無制限です。

第七パラメータは表示色とアルファ(今回は黒)

第八パラメータは、

  • 指定座標から左寄せ(KLLABEL_ALIGN_L)
  • 指定座標中心に中央寄せ(KLLABEL_ALIGN_CENTER)
  • 指定座標から右寄せ(KLLABEL_ALIGN_R)

を指定します。

Draw前に

label.fontsize = 32;

とする事でフォントサイズをそのピクセル比率に合わせて描画できます。
(上記の場合、およそ32ピクセル)

基本的な使い方は以上になります。