AS3で、
日本語フォントを埋め込んだりするとSWFの容量が大きくなってしまい、
プリロード画面(SWFファイル自体を読み込む画面)が必要になったりします。

で、フォントの埋め込み方とプリロードが
微妙に絡んでくるので、まとめて書くことにしました。

色々調べると、Flexでの話が多かったので、
CS3でどうやって解決するかを考えました。

プリロードに関しては、ドキュメントクラスを使って、
スクリプトはすべて外部.asファイルで組むことを想定しています。


※参考サイト

F1)Flash IDEでのフォントの埋め込み(AS3.0編)
使いたいフォントを含んだムービークリップをコンパイルしてパブリッシュを高速化する話。

F2)AS3 で埋め込みフォントを使うテクニック
使う文字だけを埋め込んでパブリッシュ、という高等テクニックがある。
(Perlを使ったりするので一手間かかります)
それから使われる文字が決まっていないと使えなさげです。
多分Flex向け。

P1)AS3でプリロード
Flex使ったときの話?


■ポイント

F1に書かれている、フォントをコンパイルして、
パブリッシュの効率をよくする方法に関しては、
パブリッシュ時はとても便利なので開発中はこの方法が良いかと思います。

ただ、プリロードをさせようとすると、
CS3では、コンパイル済みのクリップは、
1フレーム目の時点で読み込まれてしまうようなので、
プリロード画面がうまく動きませんでした。

ですので、プリロード画面を設ける場合は、
最後の書き出し時には、コンパイル済みクリップをライブラリから削除して、使いたいフォントを埋め込んだダイナミックテキストを、2フレーム目以降に配置して動かすのが良さそうです。
(もしかすると、埋め込みフォントを含んだ外部SWFをロードすれば動くかもしれませんが、そちらは未確認)

↓参考画面
フォント埋め込み



■プリロードのプログラム

ほぼ、上記P1のサイトと同じですが、
[Frame(factoryClass="com.mycompany.Preloader")]
といった、記述は省いています。

下記のクラスをAS3のドキュメントクラスに設定すればOKです。
Controllerというクラスはプリロードとは特に関係ありませんが、
こんな感じでinit()の中にプリロード以降に実行したい処理を書けば動くと思います。

また、以下のソースは、ドキュメントクラスに直接書いた場合の話ですが、最終的には別のクラスに書いて使いまわしやすいようにすることをお勧めします。

package
{
import classes.Controller;
import flash.display.MovieClip;
import flash.events.Event;
import flash.text.TextField;

public class Main extends MovieClip
{
private var controller:Controller;

private var tf:TextField;

public function Main():void
{
stop();
tf = new TextField();
tf.textColor = 0xFFFFFF;
tf.autoSize = "left";
addChild(tf);
addEventListener(Event.ENTER_FRAME, onEnterFrame);

}

private function onEnterFrame(evt:Event)
{
if (framesLoaded == totalFrames) {
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
removeChild(tf);
nextFrame();
init();
} else {
var percent:Number = int(100 * root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal);
tf.text = "LOADEING INTERFACE... " + percent + "%";
}
}

private function init():void
{
controller = new Controller(this);//ここに好きな処理を書く
}
}

}