書き物

技術とか作った物の話とか愚痴文句感想など

TextFieldのwidthとheight

スクリプトでテキストを表示させようとする場合、AS3ではTextFieldを使います。基本的な使い方は以下の通り。

var t:TextField = new TextField();
t.text = "文字ィッ";

もちろん、コンテナにaddChildしなければ表示されません。

しかしこのTextField、表示させる位置を設定するとき自身のサイズを使って設定すると、想定していた位置に表示されないことがあります。例えば以下のような場合。

var t:TextField = new TextField();
t.text = "文字ィッ!";
t.x = 300 - t.width / 2;
t.y = 200 - t.height / 2;

横幅300、縦幅200のステージの中心にテキストを表示させようとする場合、このように書くことはよくあります。

TextFieldはデフォルト設定だと、Flashのダイナミックテキストのようなテキストを表示させる下地のような領域が目では見えませんが、ある程度の広さで勝手に設定されているようです。よって上のt.widthは"文字ィッ!"のサイズではなく、その下地の横幅をあらわしています。この下地の横幅が文字列の横幅より広い場合、上の例ではステージの中心より少し左よりに表示されてしまいます。

しかしこの下地、表示させている文字列によって自動でサイズを変更するように設定できます。それにはどうやら、TextFieldのautoSizeプロパティにTextFieldAutoSizeの定数を設定してやればいい様子。例えば以下の通り。

var t:TextField = new TextField();
t.autoSize = TextFieldAutoSize.CENTER;
t.text = "文字ィッ!";
t.x = 300 - t.width / 2;
t.y = 200 - t.height / 2;

これで無事表示されます。autoSizeプロパティとTextFieldAutoSizeの詳細についてはFlex2のリファレンスガイドをごらんあれ。

非常に小ネタでした。