flash嵌入字体:Flash as3嵌入中文字体的思路方法

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

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

  例如如下:

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

Flash as3嵌入中文字体<img src='/icons/19099de.gif' />思路方法

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

Flash as3嵌入中文字体<img src='/icons/19099de.gif' />思路方法

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

Flash as3嵌入中文字体<img src='/icons/19099de.gif' />思路方法

Flash as3嵌入中文字体<img src='/icons/19099de.gif' />思路方法

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

  嵌入字体库文件类

package {
  
  import flash.display.Sprite;
  
  public FontLibrary extends Sprite {
  
    [Embed(systemFont=’Bank Gothic’, fontName=’emBank Gothic’, mimeType=’application/x-font’)]
    public var BankGothicFont:Class;
  
  }
  
}


  字体库文件类

var loader:Loader = Loader;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load( URLRequest(”fontlibrary.swf”));
  
private function completeHandler(event:Event):void {
  var FontLibrary:Class = event.target.applicationDo.getDefinition(”FontLibrary”) as Class;
  Font.registerFont(FontLibrary.BankGothicFont);
  var tf:TextField = TextField;
  tf.defaultTextFormat = 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);
}


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

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

Flash as3嵌入中文字体<img src='/icons/19099de.gif' />思路方法

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

var loader:Loader= Loader;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
loader.load( URLRequest(”shared.swf”));
function completeHandler(event:Event):void {
var fontLibrary:Class=event.target.applicationDo.getDefinition(”zhr_Font”) as Class;
trace(fontLibrary);
Font.registerFont(fontLibrary);
test;
}
  
function test {
var _embeddedFonts:Array = Array;
_embeddedFonts = Font.enumerateFonts(false);
trace(_embeddedFonts[0].fontName);
//trace(_embeddedFonts.length);
//var tx:TextField= TextField;
//tx.type=”input”;
tx.embedFonts=true;
//tx.defaultTextFormat= TextFormat(”zhr_Font”,20,0xFF0000);
var tf= TextFormat(_embeddedFonts[0].fontName,20,0xFF0000);
//tx.embedFonts = true;
//tx.antiAliasType = AntiAliasType.ADVANCED;
tx.text=”你好”;
tx.TextFormat(tf);
addChild(tx);
}


Tags:  flashas3教程 flashas3 flash不嵌入字体 flash嵌入字体

延伸阅读

最新评论

发表评论