Labo

AS3で外部swfに埋め込んだフォントを読み込む

前回特定の文字数だけフォントを埋め込む方法を紹介したのですが、今回は

・スクリプトで指定のフォントデータを全て埋め込みたい
・しかし、書き出す際に重くなるのは避けたい

という場合に便利な、外部swfにフォントデータを埋めてしまって、本体のswfにスクリプティングで読み込む方法を紹介します。

1. フォントを埋め込む用のFlaファイルを新規作成します。
2. ライブラリパネルの「新しいフォント」を選択し、フォントシンボルを作成します。
3. リンケージダイアログを開き、リンケージ名(クラス名)を付けます。

umekomi_font_2_1.jpg


4. 書き出します

5. 描画用のFlaファイルを新規作成します。
6. フレームアクションまたはドキュメントクラスに以下のスクリプトを記述します。

import flash.display.Loader;
import flash.display.DisplayObject;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.system.LoaderContext;
import flash.text.*;

var req :URLRequest = new URLRequest("font_rodan.swf");
var loader:Loader = new Loader();
var context :LoaderContext = new LoaderContext();

//ロード先のアプリケーションドメインを指定
context.applicationDomain = ApplicationDomain.currentDomain;

//ロードコンプリートリスナー
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoadComplete );
loader.load( req, context );

//ロードコンプリート関数
function onLoadComplete( e:Event ) {

	//アプリケーションドメインからクラスを参照し、生成
	var FontRodan:Class = ApplicationDomain.currentDomain.getDefinition( "FontRodan" ) as Class;

	//フォントクラスをグローバルフォントリストに登録
	Font.registerFont( FontRodan );

	var txt:TextField = addChild( new TextField () as DisplayObject ) as TextField;
	var f:Font = new FontRodan();
	txt.defaultTextFormat = new TextFormat( f.fontName, 20 );
	txt.embedFonts = true;
	txt.width = 500;
	txt.text = "今回は外部swfにフォントを埋め込み読み込む方法です。"
	txt.rotation = 15;
	txt.x = txt.y = 30;
}

今回もカヤックの「_level0.KAYAC」などを参考にさせていただきました。

□_level0.KAYAC
http://level0.kayac.com/2008/06/cs3.php

「ApplicationDomain」については下記エントリーに詳しく書かれています。

□akihiro kamijo
http://weblogs.macromedia.com/akamijo/archives/2006/03/applicationdoma.html

09.07.13.AM11:44

Voice

Leave a Reply
name:
e-mail:
url:
voice:

Track Back

http://plamo-tokyo.com/site/mt-tb.cgi/47