·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3中设备字体与嵌入字体的方法教程

时间:2017-06-09 10:43酷播
因为最近要做一个项目,涉及到要输入文本,flash的输入文本默认下是只能显示设备字体。连系统内的字体都不能设置,必须要嵌入才能输入

因为最近要做一个项目,涉及到要输入文本,flash的输入文本默认下是只能显示设备字体。连系统内的字体都不能设置,必须要嵌入才能输入。

as2的时代,可以用加载字体库的方式来解决,adobe官方的解释太烦琐了,其实总结起来就是一个替换字体的过程,把外部库的自定义字体替换当前的输入字体。

 例如如下:

如果是as2的话,新建一个fla文件share.fla,然后在库里新建一个字体文件,然后设置他的标识为myfont,随便选择系统内的一种字体,然后选择linkage里的导出as,导出runtime sharing,导出第一帧,然后在url处填写share.swf,然后编译成share.swf

 

然后新建主文件main.fla,同样在库里新建一个字体文件,然后设置他的url为share.swf,这样他就共享了share.swf里的字体文件,可以在场景里放一个textinput文件来做测试

 这样嵌入字体的工作就完成了,as3文件不同的地方在于没有标识这个东西了,那我们在aa.swf(就是上面的share.swf)里设置classname为自定义的字体名字zhr_font,然后在main文件里也设置成zhr_font的classname

 

 下面我们要说的是如何用程序来实现as3的中文动态嵌入加载,查了网上的一些资料,老外的做法是新建一个类,然后在类里直接embed这个font,然后最通过加载这个share.swf,然后反射出这个font类,再注册一次使用,经试验,发现这样的做法英文是可以的,如果是中文,在编译share.swf的时候会报错

嵌入字体库文件类

  1. package { 
  2.  
  3.     import flash.display.sprite; 
  4.  
  5.     public class fontlibrary extends sprite { 
  6.  
  7.         [embed(systemfont=’bank gothic’, fontname=’embank gothic’, mimetype=’application/x-font’)] 
  8.         public static var bankgothicfont:class; 
  9.  
  10.     } 
  11.  

 调用字体库文件类

  1. var loader:loader = new loader(); 
  2. loader.contentloaderinfo.addeventlistener(event.complete, completehandler); 
  3. loader.load(new urlrequest(”fontlibrary.swf”)); 
  4.  
  5. private function completehandler(event:event):void { 
  6.     var fontlibrary:class = event.target.applicationdomain.getdefinition(”fontlibrary”) as class; 
  7.     font.registerfont(fontlibrary.bankgothicfont); 
  8.     var tf:textfield = new textfield(); 
  9.     tf.defaulttextformat = new textformat(”embank gothic”, 12, 0); 
  10.     tf.embedfonts = true
  11.     tf.rotation = 15; // to demonstrate the embed worked 
  12.     tf.text = “blah blah blahnblah blah blahnblah blah blah “; 
  13.     addchild(tf); 

这个是老外的做法,试验过后发现英文是可以没有问题的,但是如果是比较大的中文ttf,在嵌入字体库文件类那处就会有问题,mxmlc编译的时候会报错

这样我们的做法是,在flash cs3里来做字体共享库,同样在库里新建一个字体

 然后在主文件里加载,然后用反射的方法注册,再使用

  1. var loader:loader=new loader; 
  2. loader.contentloaderinfo.addeventlistener(event.complete,completehandler); 
  3. loader.load(new urlrequest(”shared.swf”)); 
  4. function completehandler(event:event):void { 
  5.  var fontlibrary:class=event.target.applicationdomain.getdefinition(”zhr_font”) as class; 
  6.  trace(fontlibrary); 
  7.  font.registerfont(fontlibrary); 
  8.  test(); 
  9.  
  10. function test() { 
  11.  var _embeddedfonts:array = new array(); 
  12.  _embeddedfonts = font.enumeratefonts(false); 
  13.  trace(_embeddedfonts[0].fontname); 
  14.  //trace(_embeddedfonts.length); 
  15.  //var tx:textfield=new textfield(); 
  16.  //tx.type=”input”; 
  17.  tx.embedfonts=true
  18.  //tx.defaulttextformat=new textformat(”zhr_font”,20,0xff0000); 
  19.  var tf=new textformat(_embeddedfonts[0].fontname,20,0xff0000); 
  20.  //tx.embedfonts = true;  
  21.  //tx.antialiastype = antialiastype.advanced;  
  22.  tx.text=”你好”; 
  23.  tx.settextformat(tf); 
  24.  addchild(tx); 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器