[libgdx] scene2DでのLabelの文字サイズについて

libgdxを触り始めてまあまあ慣れてきたので一つ記事にしたいと思います。

Labelを生成するときには

上のようなコードで生成します。いきなりgameとか出てきてイミフなのでざっくり説明すると

Androidアプリの場合

  1. AndroidLauncher(AndroidApplicationを継承したActivityみたいなもの)のロード
  2. Gameクラスのロード
  3. Screenクラスのロード

の順でロードされていきます。

マルチプラットフォームで作るとき、1はプラットフォームで変わるので、プラットフォームに依存しないように機能を実装する場合はGameクラス以降に実装する必要があります。またプラットフォームに依存しなければならない機能(TTSなど)は1に実装してインターフェイスに互換を持たせるなどの工夫が必要になります。

同じフォントを生成するのであればカスタムしたGameクラスやベースのScreenクラスで管理したほうがdispose忘れによるリークを防止できます。libgdxではttfなどのフォントファイルを直接扱うにはエクステンションが必要となるので、あらかじめ設定が必要です。具体的にはプロジェクト生成時のExtentionの設定でFreetypeにチェックを入れると使えるようになります。

後からでも追加できますが、bulid.gragleの修正が必要となります。下あたりが参考になります。

私は先に話した通りGameクラスに実装して管理しています

で、最初のLabelの生成に戻りますが、この標準のLabelはScaleを変更しても反映されません。

調べたところsetFontScaleで変更は可能ですが、Debug枠が正しく表示されないとか不都合があります。Groupを生成してそこにLabelを入れる方法はいいのですがその都度Groupを生成するのも面倒なのでMyLabelクラスを作り常用しています。

getWidth()、getHeight()は正しい値を返すためにオーバーライドしています。これで一応、スケーラブルなラベルを生成することができるとおもいます。