欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Flash as3嵌入中文字体的方法

程序员文章站 2022-05-24 19:19:09
因为最近要做一个项目,涉及到要输入文本,Flash的输入文本默认下是只能显示设备字体。连系统内的字体都不能设置,必须要嵌入才能输入。 as2的时代,可以用加载字体库的方式来解决... 08-10-06...
因为最近要做一个项目,涉及到要输入文本,flash的输入文本默认下是只能显示设备字体。连系统内的字体都不能设置,必须要嵌入才能输入。
as2的时代,可以用加载字体库的方式来解决,adobe官方的解释太烦琐了,其实总结起来就是一个替换字体的过程,把外部库的自定义字体替换当前的输入字体。
例如如下:
如果是as2的话,新建一个fla文件share.fla,然后在库里新建一个字体文件,然后设置他的标识为myfont,随便选择系统内的一种字体,然后选择linkage里的导出as,导出runtime sharing,导出第一帧,然后在url处填写share.swf,然后编译成share.swf
Flash as3嵌入中文字体的方法
然后新建主文件main.fla,同样在库里新建一个字体文件,然后设置他的url为share.swf,这样他就共享了share.swf里的字体文件,可以在场景里放一个textinput文件来做测试
Flash as3嵌入中文字体的方法
这样嵌入字体的工作就完成了,as3文件不同的地方在于没有标识这个东西了,那我们在aa.swf(就是上面的share.swf)里设置classname为自定义的字体名字zhr_font,然后在main文件里也设置成zhr_font的classname
Flash as3嵌入中文字体的方法
Flash as3嵌入中文字体的方法
下面我们要说的是如何用程序来实现as3的中文动态嵌入加载,查了网上的一些资料,老外的做法是新建一个类,然后在类里直接embed这个font,然后最通过加载这个share.swf,然后反射出这个font类,再注册一次使用,经试验,发现这样的做法英文是可以的,如果是中文,在编译share.swf的时候会报错
嵌入字体库文件类
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;
}
}
调用字体库文件类
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);
}
这个是老外的做法,试验过后发现英文是可以没有问题的,但是如果是比较大的中文ttf,在嵌入字体库文件类那处就会有问题,mxmlc编译的时候会报错
这样我们的做法是,在flash cs3里来做字体共享库,同样在库里新建一个字体
Flash as3嵌入中文字体的方法
然后在主文件里加载,然后用反射的方法注册,再使用
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);
}