2008.09.13
【AS3入門】TextFieldで横幅は固定して縦方向をステージ中央に配置する
TextFieldで横幅は固定して縦方向をステージ中央に配置するコードについて。
// テキストフォーマットの設定 var txtFmt:TextFormat = new TextFormat(); txtFmt.size = 30; txtFmt.align = TextFormatAlign.LEFT; // テキストフィールドの設定 var txtFld:TextField = new TextField(); txtFld.defaultTextFormat = txtFmt; txtFld.text = "電球「俺切れたら周りとか見えなくなるタイプだから」"; txtFld.multiline = true; txtFld.wordWrap = true; // ここがポイント txtFld.width = stage.stageWidth - 50; txtFld.autoSize = TextFieldAutoSize.CENTER; // テキストフィールドを画面の中央に配置 txtFld.x = (stage.stageWidth - txtFld.width) / 2; txtFld.y = (stage.stageHeight - txtFld.height) / 2; // 視覚チェック用の追加プロパティ txtFld.background = true; txtFld.backgroundColor = 0xFF80C0; addChild(txtFld);
「// ここがポイント」の部分の1行目で、TextFieldのwidthはステージ幅から50引いたサイズを指定し、heightは指定なし。デフォルト値はwidth, heightともに100なので、この時点ではheightは100ピクセル固定。textに入っている文字列が数文字でも数百文字でもheightは100ピクセルに固定され、収まりきらない部分は表示されません。
ですが、2行目でautoSizeプロパティを有効にして、textの文字列にフィットするように指定してやるとheightが自動調節され希望通りの動作になりました。
疑問点
ところがここでひとつ疑問がっ。横幅はなぜ自動調節(autoSize)状態にならないのでしょう。widthの値を上書き(クリア)するのではなく下位互換(?)みたいな感じなんでしょうか。さらに色々実験していてもうひとつ疑問が… 数値指定したwidthを後からクリアする指定方法はあるのか、という点です。勝手にwidthとautoSizeは上書きする関係だと思っていましたが違ったわけで、じゃあ自動調節状態に意図的にするにはどうすればいいのかと思ったときにその方法がわかりませんでした。
注意点
autoSizeプロパティで、TextFieldAutoSizeをCENTERに設定していますが、wordWrapプロパティをtrueにしていると意味が無くなります。wordWrapプロパティを有効にするとwidth幅全部を使う状態になるので、width幅に対するtextWidthの幅というのが等価扱いになる模様(たぶん)。
なので、上記のような使い方の場合、TextFieldAutoSizeがデフォルト値のNONEで無いことが重要なだけで、LEFTでもRIGHTでもCENTERでも見た目は変わらないです。
課題
- TextFieldのwidthとautoSizeの関係
- widthを数値指定した状態から値をクリアする方法
まとめ
このシリーズのエントリーは、「AS3入門」のまとめにまとめてあります。





