テキストには2種類用意しようかと思っております。
・通常のテキスト
・リッチテキスト
の2種類
// --------------------------------------------------------------------------------------
// テキストを扱うオブジェクト
// 色変更は可能だが改行はできない
// 色変更はテキスト単位となる
// --------------------------------------------------------------------------------------
class TextObject : public DrawObject {
private :
std::string m_text;
int m_colorR;
int m_colorG;
int m_colorB;
// --------------------------------------------------------------------------------------
// リッチテキストを扱う
// "Hello World" → 'H','e','l','l','o',' ','W','o','r','l','d'
// というように文字単位でオブジェクトとして管理する。
//
// 幅指定による自動改行・文字別の色などをサポートする
// TextObjectより処理が全体的に重い
// --------------------------------------------------------------------------------------
class RichTextObject : public DrawObject {
private :
std::string m_text;
TextObject* m_textObj;
文字列単位なので改行や文字単位の色変更はできない。
リッチテキストはテキストを1オブジェクトにつき1文字としてリストで管理する。
サイズ指定によって改行・文字単位の色変更などをサポートしていく(予定)
1文字につき1オブジェクトでの管理なのでテキストに比べると重いがその分自由度が高いのがポイント。
文字をバラバラに飛ばすような演出の作成から、1文字1文字色を変えた虹色テキストまでやろうと思えば可能。
機能を拡張すればセンタリングなんかも対応可能。
ちょっと改造すれば会話イベントのテキスト処理もこれ一つでどうにかなる。
// リッチテキストの設定
void setText( std::string text ){
m_text = text;
// テキストを全部消す
m_textObj->ReleaseObject();
// 新しいテキストを再連結
float x = 0;
float y = 0;
for( size_t i = 0 ; i = 0x81 && c1 = 0xE0 && c1 setPos( x , y );
c->setText( s );
x += charW;
if( x >= sizeWidth ){
x = 0;
y += charH;
}
m_textObj->addObject( c );
i += next;
}
}
タグ解析からカラー指定できるようにしていく予定。
意外とフォント周りは画像以上に面倒臭そう
ではでは