Flash:TextField字体不显示/文字不显示/文字丢失

节约大家时间,先说结论:

1、是否文字中包含了\r\n等字符,flash中,\r和\n都会换行。需要过滤掉其中1个

2、是否文本框大小不够,文字被挤到下一行了。设置单行、多行

3、TextField使用了抗锯齿,需要嵌入字体,但动态变化的文字并不在嵌入的文字中。这个具体不说了,不懂的就得回去补课了。

4、是否文本框使用嵌入字体,但需要显示的文字却又没有包含在字体中。

     还有一种比较特殊的情况,就是嵌入了2个字体(例如两个swc),重复导入了同样的字体,较小的那一个可能覆盖了大的那个。导致无法显示。

5、最后最奇葩。。。嵌入swf到html中时,是否没有设置wmode节点。尝试调整wmode,试试window、opaque、transparent。

     主要是有可能在某些webkit下出现问题(例如qq客户端自带的),出现文本变白,跟背景混在一起。

=======================================================

关于第4点,这里是非常奇怪的现象,需要做个实验来给大家说明一下。另外可以参考yboy的文章:http://riaoo.com/?p=2401

如果flash程序嵌入了多个swc,而这些swc如果嵌入一样的字体会导致冲突。

如果两个嵌入的字还不相同,貌似flash builder会倾向于只保留少的那个。但反正不能允许这种情况出现了。

实验验证:

1、首先做两个fla,导出swc和swf,一个叫font1,一个叫font2,分别嵌入“一二三四”和“一二三四五六”。需要注意的是,动态文本写死的那几个字,也会自动被嵌入(如果不是选“设备字体”)。

  SWF的结构:场景中放一个元件,元件导出as链接,元件的子元件是TextField

2、编写fb代码,如下所示,实现三种加载方式。

              [ Embed(source= "../lib/font1.swf" )]
               private var Font1:Class;
              [ Embed(source= "../lib/font2.swf" )]
               private var Font2:Class;
              
               public function Test2()
              {
                      //第一种嵌入方式(运行时加载swf)
                      var loader1:Loader = new Loader();
                     loader1.load( new URLRequest("font1.swf"), new LoaderContext(false , ApplicationDomain.currentDomain));
                     addChild(loader1);
                     
                      var loader2:Loader = new Loader();
                     loader2.load( new URLRequest("font2.swf"), new LoaderContext(false , ApplicationDomain.currentDomain));
                     addChild(loader2);
                     loader2.x = 300;
                     
                     setTimeout( function():void{
                            TextField(MovieClip(MovieClip(loader1.content). getChildAt(0)).getChildAt (0)).text = "一二三四五六" ;
                            TextField(MovieClip(MovieClip(loader2.content). getChildAt(0)).getChildAt (0)).text = "一二三四五六" ;
                     }, 1000);
                     
                     
                      //第二种嵌入方式(加入swc)
                      var text1:MovieClip = new TestFont1();
                     addChild(text1);
                     text1.y = 50;
                     TextField(text1. getChildAt(0)).text = "一二三四五六";
                      var text2:MovieClip = new TestFont2();
                     addChild(text2);
                     text2.x = 300;
                     text2.y = 50;
                     TextField(text2. getChildAt(0)).text = "一二三四五六";
                     
                     
                      //第三种嵌入方式(编译时嵌入swf)
                      var text3:MovieClip = new Font1();
                     addChild(text3);
                     text3.y = 100;
                      var text4:MovieClip = new Font2();
                     addChild(text4);
                     text4.x = 300;
                     text4.y = 100;
                     setTimeout( function():void{
                            //text3是封装的一个壳,子元件是loader,loader里边才是这个swf
                            Object(text3).getChildAt(0).content. getChildAt(0).getChildAt(0).text = "一二三四五六" ;
                            Object(text4).getChildAt(0).content. getChildAt(0).getChildAt(0).text = "一二三四五六" ;
                     }, 1000);

上述代码会产生这样的效果:(第一行是load swf的方式,第二行是直接引入swc再编译,第三行是嵌入swf)

我们看第一行和第三行,font1因为只嵌入了“一二三四”,所以无法显示“五六”,但font2没有受到影响。但第二行,font1和font2都只能显示“一二三四”,这里边定有乾坤。

反编译结果swf可以发现,引入swc的方式,虽然fb还是生成了两个字体,但是实际运行的时候,只索引了第一个字体,第二个就被忽略了,所以“五六”没有显示。

根据yboy的记录,我这里尝试把font1的TextField设置为“设备字体”,情况更极端了。

(第二行)font1直接嵌入了一个没有字的字体,导致font2完全不显示的。正如yboy说的,“嵌入了一个没有字的字体和没有嵌入字体是大大不同的”。没有嵌入字体就不会影响font2了,正是font1嵌入了字体,但却不带任何字,导致问题发生。

避免这个问题的方式:

1、改为加载多个swf的方式,不要引入多个swc;

2、如果必须引入多个swc,约定只在一个swc中嵌入字体;

3、最根本!避免这种动态修改文字的方式,改为换一帧,或者换个图片。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Lambda

Bootstrap笔记

Bootstrap简介什么是Bootstrap?框架:库 lib libraryjQuery作为一个框架来讲,提供一套比较便捷的操作DOM的方式把大家都需要的功...

27590
来自专栏木宛城主

ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件

Bootstrap为我们提供了十几种的可复用组件,包括字体图标、下拉菜单、导航、警告框、弹出框、输入框组等。在你的Web Application中使用这些组件...

743100
来自专栏游戏杂谈

Android应用icon和闪屏splash的尺寸

我查看支付宝钱包的时候,发现drawable-xxxhdpi里面的尺寸是180 x 180,不是上面标的192 x 192

18510
来自专栏九彩拼盘的叨叨叨

前端组件整理

57930
来自专栏散尽浮华

Html之初体验

概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言。相当于定义统一的一套规则,大...

261100
来自专栏林冠宏的技术文章

android 如何正确使用 泛型 和 多参数 “偷懒”

我要实现这样一个标题栏 ? 共 4 个选项,采用布局是一个 TextView 对应一个小三角 ImageView,各个选项没被点击时,字体颜色是 黑色,小三角不...

21290
来自专栏葡萄城控件技术团队

如何使用纯前端控件集 WijmoJS 中的可视化在线设计器

WijmoJS Designer,一种全新的在线Web托管工具,为WijmoJS纯前端控件集提供了可视化设计图面和 Java代码生成器。 WijmoJS Des...

33620
来自专栏向治洪

React Native ios开发第一课

前言 本篇文章的作用在于帮助你快速上手使用React Native编写iOS应用。如果你现在还不太了解React Native是什么以及Facebook为什么...

22880
来自专栏数据小魔方

可视化基础——字体篇

今天是2015的最后一天了,也是小魔方持续更新的第11天,感谢众多小伙伴们的支持和关注,预祝大家元旦快乐,新的一年一切都更美好!!! 之前两篇给大家分享了一些...

38180
来自专栏知晓程序

开发 | 傻瓜式操作带你初始化「跳一跳」游戏场景

在上一篇教程里,知晓程序为大家详细讲解了如何创建小游戏「跳一跳」的游戏场景。通过介绍,大家一定对于小游戏的开发有了更进一步的认识。

17730

扫码关注云+社区

领取腾讯云代金券