Flash as3嵌入中文字體的方法
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-06 01:25:25 作者:佚名
我要評論

因?yàn)樽罱鲆粋€項(xiàng)目,涉及到要輸入文本,F(xiàn)lash的輸入文本默認(rèn)下是只能顯示設(shè)備字體。連系統(tǒng)內(nèi)的字體都不能設(shè)置,必須要嵌入才能輸入。
as2的時代,可以用加載字體庫的方式來解決,Adobe官方的解釋太煩瑣了,其實(shí)總結(jié)起來就是一個替換字體的過程,把外部庫的自定義字體替
因?yàn)樽罱鲆粋€項(xiàng)目,涉及到要輸入文本,F(xiàn)lash的輸入文本默認(rèn)下是只能顯示設(shè)備字體。連系統(tǒng)內(nèi)的字體都不能設(shè)置,必須要嵌入才能輸入。
as2的時代,可以用加載字體庫的方式來解決,Adobe官方的解釋太煩瑣了,其實(shí)總結(jié)起來就是一個替換字體的過程,把外部庫的自定義字體替換當(dāng)前的輸入字體。
例如如下:
如果是as2的話,新建一個Fla文件share.fla,然后在庫里新建一個字體文件,然后設(shè)置他的標(biāo)識為MyFont,隨便選擇系統(tǒng)內(nèi)的一種字體,然后選擇linkage里的導(dǎo)出as,導(dǎo)出runtime sharing,導(dǎo)出第一幀,然后在url處填寫share.swf,然后編譯成share.swf

然后新建主文件main.fla,同樣在庫里新建一個字體文件,然后設(shè)置他的url為share.swf,這樣他就共享了share.swf里的字體文件,可以在場景里放一個textinput文件來做測試

這樣嵌入字體的工作就完成了,as3文件不同的地方在于沒有標(biāo)識這個東西了,那我們在aa.swf(就是上面的share.swf)里設(shè)置Classname為自定義的字體名字zhr_font,然后在Main文件里也設(shè)置成zhr_font的ClassName


下面我們要說的是如何用程序來實(shí)現(xiàn)as3的中文動態(tài)嵌入加載,查了網(wǎng)上的一些資料,老外的做法是新建一個類,然后在類里直接embed這個font,然后最通過加載這個share.swf,然后反射出這個Font類,再注冊一次使用,經(jīng)試驗(yàn),發(fā)現(xiàn)這樣的做法英文是可以的,如果是中文,在編譯share.swf的時候會報(bào)錯
嵌入字體庫文件類
package {
import flash.display.Sprite;
public class FontLibrary extends Sprite {
[Embed(systemFont=’Bank Gothic’, fontName=’emBank Gothic’, mimeType=’application/x-font’)]
public static var BankGothicFont:Class;
}
}
調(diào)用字體庫文件類
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest(”fontlibrary.swf”));
private function completeHandler(event:Event):void {
var FontLibrary:Class = event.target.applicationDomain.getDefinition(”FontLibrary”) as Class;
Font.registerFont(FontLibrary.BankGothicFont);
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat(”emBank Gothic”, 12, 0);
tf.embedFonts = true;
tf.rotation = 15; // to demonstrate the embed worked
tf.text = “blah blah blahnblah blah blahnblah blah blah “;
addChild(tf);
}
這個是老外的做法,試驗(yàn)過后發(fā)現(xiàn)英文是可以沒有問題的,但是如果是比較大的中文ttf,在嵌入字體庫文件類那處就會有問題,mxmlc編譯的時候會報(bào)錯
這樣我們的做法是,在Flash cs3里來做字體共享庫,同樣在庫里新建一個字體

然后在主文件里加載,然后用反射的方法注冊,再使用
var loader:Loader=new Loader;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.load(new URLRequest(”shared.swf”));
function completeHandler(event:Event):void {
var fontLibrary:Class=event.target.applicationDomain.getDefinition(”zhr_Font”) as Class;
trace(fontLibrary);
Font.registerFont(fontLibrary);
test();
}
function test() {
var _embeddedFonts:Array = new Array();
_embeddedFonts = Font.enumerateFonts(false);
trace(_embeddedFonts[0].fontName);
//trace(_embeddedFonts.length);
//var tx:TextField=new TextField();
//tx.type=”input”;
tx.embedFonts=true;
//tx.defaultTextFormat=new TextFormat(”zhr_Font”,20,0xFF0000);
var tf=new TextFormat(_embeddedFonts[0].fontName,20,0xFF0000);
//tx.embedFonts = true;
//tx.antiAliasType = AntiAliasType.ADVANCED;
tx.text=”你好”;
tx.setTextFormat(tf);
addChild(tx);
}
as2的時代,可以用加載字體庫的方式來解決,Adobe官方的解釋太煩瑣了,其實(shí)總結(jié)起來就是一個替換字體的過程,把外部庫的自定義字體替換當(dāng)前的輸入字體。
例如如下:
如果是as2的話,新建一個Fla文件share.fla,然后在庫里新建一個字體文件,然后設(shè)置他的標(biāo)識為MyFont,隨便選擇系統(tǒng)內(nèi)的一種字體,然后選擇linkage里的導(dǎo)出as,導(dǎo)出runtime sharing,導(dǎo)出第一幀,然后在url處填寫share.swf,然后編譯成share.swf

然后新建主文件main.fla,同樣在庫里新建一個字體文件,然后設(shè)置他的url為share.swf,這樣他就共享了share.swf里的字體文件,可以在場景里放一個textinput文件來做測試

這樣嵌入字體的工作就完成了,as3文件不同的地方在于沒有標(biāo)識這個東西了,那我們在aa.swf(就是上面的share.swf)里設(shè)置Classname為自定義的字體名字zhr_font,然后在Main文件里也設(shè)置成zhr_font的ClassName


下面我們要說的是如何用程序來實(shí)現(xiàn)as3的中文動態(tài)嵌入加載,查了網(wǎng)上的一些資料,老外的做法是新建一個類,然后在類里直接embed這個font,然后最通過加載這個share.swf,然后反射出這個Font類,再注冊一次使用,經(jīng)試驗(yàn),發(fā)現(xiàn)這樣的做法英文是可以的,如果是中文,在編譯share.swf的時候會報(bào)錯
嵌入字體庫文件類
package {
import flash.display.Sprite;
public class FontLibrary extends Sprite {
[Embed(systemFont=’Bank Gothic’, fontName=’emBank Gothic’, mimeType=’application/x-font’)]
public static var BankGothicFont:Class;
}
}
調(diào)用字體庫文件類
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest(”fontlibrary.swf”));
private function completeHandler(event:Event):void {
var FontLibrary:Class = event.target.applicationDomain.getDefinition(”FontLibrary”) as Class;
Font.registerFont(FontLibrary.BankGothicFont);
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat(”emBank Gothic”, 12, 0);
tf.embedFonts = true;
tf.rotation = 15; // to demonstrate the embed worked
tf.text = “blah blah blahnblah blah blahnblah blah blah “;
addChild(tf);
}
這個是老外的做法,試驗(yàn)過后發(fā)現(xiàn)英文是可以沒有問題的,但是如果是比較大的中文ttf,在嵌入字體庫文件類那處就會有問題,mxmlc編譯的時候會報(bào)錯
這樣我們的做法是,在Flash cs3里來做字體共享庫,同樣在庫里新建一個字體

然后在主文件里加載,然后用反射的方法注冊,再使用
var loader:Loader=new Loader;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.load(new URLRequest(”shared.swf”));
function completeHandler(event:Event):void {
var fontLibrary:Class=event.target.applicationDomain.getDefinition(”zhr_Font”) as Class;
trace(fontLibrary);
Font.registerFont(fontLibrary);
test();
}
function test() {
var _embeddedFonts:Array = new Array();
_embeddedFonts = Font.enumerateFonts(false);
trace(_embeddedFonts[0].fontName);
//trace(_embeddedFonts.length);
//var tx:TextField=new TextField();
//tx.type=”input”;
tx.embedFonts=true;
//tx.defaultTextFormat=new TextFormat(”zhr_Font”,20,0xFF0000);
var tf=new TextFormat(_embeddedFonts[0].fontName,20,0xFF0000);
//tx.embedFonts = true;
//tx.antiAliasType = AntiAliasType.ADVANCED;
tx.text=”你好”;
tx.setTextFormat(tf);
addChild(tx);
}
相關(guān)文章
flash cs6鼠標(biāo)跟隨效果實(shí)現(xiàn)代碼分享
flash cs6想要實(shí)現(xiàn)鼠標(biāo)跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實(shí)現(xiàn)鼠標(biāo)跟隨效果的教程,需要的朋友可以參考下2019-05-19- Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細(xì)的教程,需要的朋友2018-03-11
- flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://www.dbjr.com.cn/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2018-01-25Flash中怎么實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?
本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學(xué)習(xí)2018-01-12- 本教程教腳本之家的ActionScript教程學(xué)習(xí)者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細(xì),感興趣的朋友歡迎前來分享學(xué)習(xí)2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學(xué)習(xí)者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細(xì),方法也不難,非常適合Flash新手入門學(xué)習(xí)2017-11-18Flash怎么設(shè)置元件坐標(biāo)?flash使用代碼設(shè)置元件的坐標(biāo)的教程
Flash怎么設(shè)置元件坐標(biāo)?flash中導(dǎo)如的元件需要添加坐標(biāo),該怎么定位元件坐標(biāo)呢?下面我們就來看看flash使用代碼設(shè)置元件的坐標(biāo)的教程,需要的朋友可以參考下2017-10-11- Flash怎么制作來回?fù)u擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細(xì)的教程,很簡單,需要的朋友可以參考下2017-05-23
- Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細(xì)的教程,需要的朋友可以參考下2017-04-23