Flashでテキストフィールドの文字を中心に表示する。
テキストフィールドの文字をターゲットの中心に表示するときの覚書。
autoSizeを設定しておくことと、フォントサイズを大きめに指定してから縮小することに注意する。 letterSpacingを使用するときはrightMarginに-new Number(letterSpacing)を指定することで調整できる。 中心の座標を計算するときはtextWidthやtextHeightではなく、width、heightで計算するほうがよいようだ。サンプルはリロードでletterSpacingの値の変化と表示の違いが確認できる。
SAMPLE VIEW CODE
package {
import flash.display.*;
import flash.text.*;
public class NMain extends MovieClip {
//-------------------------------------------------------------------------------- Properties
private var _this:*;
private var _stage:Stage;
//-------------------------------------------------------------------------------- Constractor
public function NMain() {
_this = this;
_stage = stage;
_stage.scaleMode = StageScaleMode.NO_SCALE;
_stage.align = StageAlign.TOP_LEFT;
Init();
}
//-------------------------------------------------------------------------------- Function
/**
* initialize
*/
public function Init():void {
setup();
}
/**
* setup
*/
private function setup():void {
settext(randumstr(), _this["base_1"]);
settext(randumstr() + randumstr(), _this["base_2"]);
settext(randumstr() + randumstr() + randumstr(), _this["base_3"]);
settext(randumstr() + randumstr() + randumstr() + randumstr(), _this["base_4"]);
settext(randumstr() + randumstr() + randumstr() + randumstr() + randumstr(), _this["base_5"]);
}
//
private function randumstr():String {
return new String(Math.ceil(Math.random() * 10 - 1));
}
//
private function settext(str:String, tgtbase:MovieClip):void {
var _textmc = new textmc();
tgtbase.addChild(_textmc);
var limit = 140;
var _t:TextField = _textmc["t"];
_t.width = 0;
_t.height = 0;
_t.autoSize = "left";
_t.multiline = false;
_t.wordWrap = false;
_t.border = true;
_t.borderColor = 0xEAEAEA;
var f:TextFormat = new TextFormat();
f.size = 1000;
f.letterSpacing = 100 * Math.random() - 20;
f.indent = 0;
f.rightMargin = -new Number(f.letterSpacing);
_t.defaultTextFormat = f;
_t.text = str;
_textmc.width = limit;
_textmc.scaleY = _textmc.scaleX;
if(_textmc.height > limit) {
_textmc.height = limit;
_textmc.scaleX = _textmc.scaleY;
}
_textmc.x = -_textmc.width / 2;
_textmc.y = -_textmc.height / 2;
}
}
}