收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 2139|回复: 5

[分享] Embedded fonts and static text BUG?

[复制链接]
发表于 2010-1-21 01:35:54 | 显示全部楼层 |阅读模式
english:


here are two .swf files.

one is fontLib.swf,one is main.swf.

fontLib.swf has embed a font to its lib,class name:Impact

It's is for dynamic textFeild which in  main.swf  embed font.


In main.swf,there are two textFeild.the one is  static font type and font is "Impact",

the other one is dynamic textFeild and its font is "_sans".


when fontLib.swf was loaded to main.swf,register font which embed in fontLib.swf.

and set dynamic textFeild's font to Impact(styleSheet or textFormat all is ok),and set its embedFont=true,text or htmlText equal some string such as "asdfdsadf".


but,unfortunately,the text was disappear.

except:

1,change static textFeild's font to a  different one,be sure its font is differ from dynamic textFeild's.

2,change static textFeild's anti-alias to bitmap text.

3,set embed font's fontName to another,make sure  its fontName is differ from its true name


ps,Impact just a random selection of font.




中文的:


fontLib.swf 的库里有导入这个某个字体用来为main.swf做嵌入字体使用。

main.swf装载这个SWF,

在main.swf里有2个文本框,一个事静态文本框,字体为Impact,一个是动态文本框,字体选择为设备字体_sans

当,fontLib.swf加载完毕后,然后注册相应的字体CLASS :Impact

然后给动态文本框嵌入字体,并设置字体为Imact,和设置值,这个时候动态文本框里的文字不会被显示。

除非:

1,将静态文本里的字体改为其他字体(不是和动态文本框里的字体一样就行)

2,将静态文本里的文字显示属性改为bitmap text

错误的应该是ADOBE。。。。。
解决方案再另外加一个:
3:嵌入字体的时候,将字体的fontName改掉,不要默认和文字原始名字一样,建议在字体原始名字前加“_”以示区别。
这样的话,就不会有以上问题。当然,这个解决方案同时也只是曲线救国,回避了使用同一字体和fontName的问题。



这样,动态文本框里的文字才能正确显示。

PS,这里的Impact字体只是随意选择的一款字体,并不是针对哪一款字体而言。



main.swf 代码如下( code of main.swf ):

var cssString:String=".title{font-family:Impact}";


var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT,loaded);


var st:StyleSheet=new StyleSheet();
st.parseCSS(cssString);
function loaded(e:Event) {
    addChild(loader);
    // var ft:Class=this.applicationDomain.getDefinition("Impact") as Class;
    //var ft=getDefinitionByName("Impact");
    var ft=loaderContxt.applicationDomain.getDefinition("Impact") as Class;
    Font.registerFont(ft);
    Font.fontType=FontType.EMBEDDED;
    showFontList();
    setText();
}
function setText() {
    _txt.styleSheet=st;
    _txt.embedFonts=true;
    _txt.antiAliasType=AntiAliasType.ADVANCED;
    _txt.htmlText="<span class='title'>asfasdfasf</span>";
}
function showFontList() {


    var fts:Array=Font.enumerateFonts();
    for (var i in fts) {
        trace(fts[i].fontName);
    }
}


var loaderContxt:LoaderContext=new LoaderContext();
loaderContxt.applicationDomain=new ApplicationDomain(ApplicationDomain.currentDomain);
loader.load(new URLRequest("fontLib.swf"),loaderContxt);
//Font.registerFont(Impact);
//setText()


请问谁知道是怎么回事么?是不是AS3的BUG?

[[i] 本帖最后由 4belief 于 2010-1-21 15:02 编辑 ]
发表于 2010-1-21 07:26:50 | 显示全部楼层
不是BUG,应该是操作问题吧

马上上班了,关机
大家继续
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-21 11:12:00 | 显示全部楼层

不是操作问题,已经和好几位同事检查过。

这个是测试文件地址:http://www.ourbrander.com/demo/font.rar
回复 支持 反对

使用道具 举报

发表于 2010-1-21 11:54:21 | 显示全部楼层
Impact是不是被占用造成了,而静态文本和动态文本样式又不一样,所以动态文本无法正常显示
如果改成bitmap text,此时静态文本并没有占用这个字体,所以动态文本可以正常显示

后来我把_txt.embedFonts=true;这个注释掉了,就可以都显示了
因为静态文本用了动画消除锯齿,就默认嵌入字体了,两个都嵌入了,所以出错了

而位图文本是没有嵌入字体的所有样式,只是当前的,所以你动态嵌入了没有出错

我根据你情况分析的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-21 15:00:43 | 显示全部楼层

本测试案例没有任何程序编写错误

错误的应该是ADOBE。。。。。
解决方案再另外加一个:
3:嵌入字体的时候,将字体的fontName改掉,不要默认和文字原始名字一样,建议在字体原始名字前加“_”以示区别。
这样的话,就不会有以上问题。当然,这个解决方案同时也只是曲线救国,回避了使用同一字体和fontName的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-21 15:03:45 | 显示全部楼层

本帖到此可以结贴了

如果没有更好的解决方案,建议不要回复了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-5-21 18:47 , Processed in 0.093750 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表