2012年2月15日 星期三

embedding font in as3

已經用好一陣子了,
最近重新使用的時候遇到一些小問題,隨手記下來。

小工具,flash中文字體嵌入助手
http://kevincao.com/2010/07/hanfont/
可以自動產生unicodeRange,相當方便。

flex 4編譯時會有問題,解決方法加上
embedAsCFF="false"

另外要注意,
FlashDevelop 開發時 FontLibrary document main class 不要用 main 會跟 Loader main class 打架,完整code如下:

[FontLibrary.swf]
in MainFont.as

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.Font;
/**
* 注意 document main class 不要用 main 會跟 loader main class 打架
*/
public class MainFont extends Sprite
{
[Embed(source = "ctb_wt024.ttf", fontName = "FontName", unicodeRange = "U+31,U+32,U+33,U+34,U+35,U+36,U+37,U+38,U+39,U+30,U+52c7,U+6562,U+8ffd,U+9010,U+81ea,U+5df1,U+7684,U+5922,U+548c,U+8272,U+5f69", mimeType = "application/x-font-truetype", embedAsCFF="false")]
public var FontClass:Class;
public function MainFont():void
{
Font.registerFont(FontClass);
}
}
}
view raw MainFont.as hosted with ❤ by GitHub
[Loader.swf]
in Main.as

package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.text.Font;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
public class Main extends Sprite
{
private var loader:Loader;
public function Main()
{
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
// project is here "as3_test\font\FontLibrary"
loader.load(new URLRequest("FontLibrary.swf"));
}
private function completeHandler(event:Event):void
{
trace("Complete");
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
for each (var f:Font in Font.enumerateFonts())
{
trace("fontName:"+f.fontName);
}
var myTextBox:TextField = new TextField();
myTextBox.defaultTextFormat = new TextFormat("FontName", 28, 0x2DAAFD, true);
myTextBox.autoSize = TextFieldAutoSize.LEFT;
myTextBox.embedFonts=true;
myTextBox.selectable = false;
myTextBox.text = "1234567890勇敢追逐自己的夢和色彩";
addChild(myTextBox);
}
}
}
view raw Main.as hosted with ❤ by GitHub

沒有留言:

張貼留言