ActionScript Memo 110603

6.3.2011

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;
		}
		

	}
}



category : ActionScript / Flash

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category