効率的なダイナミックテキストの扱いを考える

ダイナミックテキストをスクリプトを使って作ったり、配置したりすると、テキストフィールドの操作だったり、テキストボックス自体のプロパティ設定だったりと、いろいろと面倒だし、特にこれがレイアウト中の操作だったりすると、ものすごいイライラが溜まる。そこで、ちょっといい方法を思いついたので、メモしておくことにする。
早い話、面倒なのはスクリプト上でテキストボックスを作成→プロパティ設定→レイアウト確認というステップが面倒なのだから、ある程度の基本的な設定はテキストパネル上で設定(フォント名だとかデータのエンベット処理だとか)して、MovieClip化してしまい、それをテキストの設定に合わせた名前をつけてライブラリに登録しておく。そしてそれを使って、頻繁に設定を変えたい部分だけをスクリプトで処理していくという方法。

ダイナミックテキストをMovieClip化して使う

まず、とりあえずレイアウトラフなどから、使用するフォントと基本的なプロパティ(ボールドとか行間だとか)を設定して使いそうなテキスト用MovieClipを作っておく。

そしてレイアウト時には、ここから取り出して、好きな位置に配置。これでテキストの配置作業は簡略化できる。また、この基本セットのテキストボックスから、ちょっとだけ変えたいプロパティだけをスクリプトで変えてしまえばよい。

配置したテキストにプロパティを設定するためのサブメソッドを追加する

重要なのはここからで、一つ一つのテキストに細かい処理を施していくのは面倒なので、処理をグローバルで関数化してムービークリップ内のテキストに引数を使い、プロパティ変更させていく。具体的にはこんなコード(MovieClip内のテキストボックスには、全てtextboxという名前をつけておくこと!)

//テキスト設定用メソッドtextProp

_global.textProp = function(targ, tWidth, multiBool, wrapBool, basePos, htmlBool, content) {
	with(targ) {
		textbox._width = tWidth;	//テキストボックスの幅
		textbox.multiline = multiBool;	//複数行設定
		textbox.wordWrap = wrapBool;	//テキストの折り返し
		textbox.autoSize = basePos;	//テキスト固定位置
		textbox.html = htmlBool;	//html化
		if (htmlBool != false) {	//ストリングを格納
			textbox.htmlText = content;
		} else {
			textbox.text = content;
		}
	}
}

これで準備完了。グローバル化してあるので、当然どこでも使える。あとは配置したテキストボックスでメソッドを実行するだけだ。

//テキスト設定処理(MovieClip“summary”)
content = stringObj.summary;	//コンテンツの中身を保存
textProp(summary, 400, false, false, "left", true, content);	//メソッド実行

比較的デザインやレイアウトにこだわる人は、一度試してみるとなかなかナイスな手であることに気づくはず。例えば、フラッシュ上で実際に文字を入れてレイアウトしていて、あとからダイナミックテキストにする場合などは、ムービークリップの入れ替えだけで済むので、かなり楽チンだと思う。 また、関数内でfontなどの指定をしてあげれば、getFontList関数などを使って、クライアントの中に入っているfontによって、適用させるfontとか他のプロパティを条件分岐&一括指定できるので、そういった点からも有効かなと思う。