ええ、見事にハマりました。テキスト改行できないじゃん!

じゃあ自分でやるか!!!と思って独自実装で完成させた後にText.classみてたらAutoWarpとかなんかあるぞ。。。と俺の2時間返せー!!という状態に陥ったのでメモを残します。

あと、wiki文法で書いてみました。

Markdown対応しないかなぁ。

やりたかったこと

ノベルゲーム風な会話ウィンドウの作成。テキストを複数行に表示。

イマイチな実装方法

AndEngineのTextクラスをListでもっておいて、行毎にTextクラスの高さ分ずらして表示する。

※アンチパターンすぎる実装なので、全ソースは載せません。こんな感じという雰囲気だけ掴んで貰えればと

// 最大文字数でテキストウィンドウを作成
int textMaxLength = getMaxLength(talks);
int textMaxLine = getMaxLine(talks);
for (inti = 0; i < textMaxLine; i++) {
     Text talkText = new Text(16, 16, font, 
          getSizeToStr("-", textMaxLength), 
          new TextOptions(HorizontalAlign.LEFT), 
          baseScene.getBaseActivity().getVertexBufferObjectManager());
     
     talkText.setPosition(0, i * talkText.getHeight());
     talkTexts.add(talkText);
}

TextクラスのTextOptionsクラスについて

フィールド変数は、以下4つあります。

AutoWrap mAutoWrap;

テキストの折り返しについての設定。

  • AutoWrap.NONE : 自動折り返しなし、普通に「\n」で改行してくれる
  • AutoWrap.WORDS : 半角スペース毎に改行
  • AutoWrap.LETTERS : mAutoWrapWidthで指定した幅を超えたら改行
  • AutoWrap.CJK : 基本的にはLETTERSと同じで最後の行に空行を付与する感じなのかな?
float mAutoWrapWidth;

テキスト折り返しの基準となるWidthの設定。AutoWrap.LETTERSの時とAutoWrap.CJK時に有効。

float mLeading;

よくわからない。。。

HorizontalAlign mHorizontalAlign;

左寄せ、右寄せとかの設定。

  • HorizontalAlign.LEFT : 左寄せ
  • HorizontalAlign.RIGHT : 右寄せ
  • HorizontalAlign.CENTER : 中央寄せ

わからなかった奴は、分かり次第追記したいと思いますー。内容が間違ってたり謎の部分が分かる方は、コメントいただけると助かります!!!

実装した結果こんな感じ。

文章は外部テキストファイルとかを読み込むつもりなので、下手に文字数で改行とかされるよりこっちで改行文字入れたほうが扱い易いと思ったのでAutoWarp.NONEにしました。

device-2013-01-13-170653

何か( ー`дー´)キリッとしたセリフ吐いてますが、これはSAOのキリトさんの名言です。

あ、今回利用している画像について一応。

素材提供:臼井の会
素材の二次利用、販売、再配布を禁じます。