动态文本的特效显示与文件大小之间的矛盾

作者:袖梨 2022-07-02

在论坛,笔者会不时见到一些人问关于动态文本的问题,其中问得最多的是动态文本的透明,旋转与遮罩等特效,以及嵌入字符后文件变大等问题.
为了让更多的人能够更好地使用动态文本,以及避免论坛里重复出现类似的帖子,笔者下定决心,写一个针对上述问题的动态文本使用教程.

说明:
1 二楼主要讨论文本显示的原理问题,理论性比较强,如果读者只是为了解决问题,做出需要的效果的话,二楼的内容可以跳过.
2 三楼主要提出问题的解决方案,包括显示,以及避免文件变大的问题.
3 要在显示和文件大小这对矛盾处理好的情况下,做出需要的效果有些时候是不行的,为此,四楼提供了一些替代效果的思维方法以及参考方案.
4 替代效果用了不好,该怎么办?直接从字体文件下手,五楼给大家介绍一个字体编辑软件.帮助你减少字体文件大小以后再嵌入到flash

问:为什么动态文本不能透明,旋转和遮罩?
答:在默认情况下,静态文本在生成Flash时就会把文本相应的矢量信息也保存到swf中,这种做法可以避免作品拿到别的机器上时因缺乏字体而无法正常显示文本的问题.而动态文本则不会作这样的处理,因为文本内容是变化的,如果像静态文本那样,就要把所有文字的矢量信息都生成到Flash中,导致文件变得很大.因此,默认情况下,在动态文本要显示字符的时候,Flash播放器会实时从系统里调用字体来显示,这样显示的字体叫设备字体.
设备字体调用到Flash以后,只剩下一些点阵信息,不存在矢量信息(这也是文本出现锯齿的原因).所以,它不能像图形那样进行几何运算,不能得出旋转后矢量到底是什么形状.



至于为什么不能透明,笔者认为,透明的显示还要计算透明层与下面层的颜色叠加.至于在哪个位置叠加,也是需要矢量信息的支持的.



然后,遮罩也是一种特效,它是需要遮罩层与被遮罩层的轮廓叠加才能算出图形的形状,所以设备字体显示的动态文本也是不行的.
问:如何解决这个问题呢?
答:很简单的一个办法.选中动态文本以后,在属性面板里点"字符"按钮,选择"所有字符"就可以了.因为这样实际上是嵌入了字体的矢量信息,所以就可以进行特效的处理了.
问:上面的问题是解决了,可是这样生成的文件很大(几M到十几M),何解?
答:上面说了,嵌入字体实际上是嵌入了字体的矢量信息.如果你嵌入了所有字符,实际上你把整个字体文件都放到swf文件里头.
假设你用的是宋体,你可以进行如下操作:
打开系统的控制面板,并双击"字体"进入



找到"宋体"后,看看文件的大小,你的swf也就会因此而增加(笔者的机这个文件为10M大,所以,嵌入字体轮廓后,swf就会大10M多.



问:这么大的Flash放到网上很不实际,想把它变小该如何处理?
答:这需要具体问题具体分析.
问:我的动态文本显示的肯定是数字,该如何操作?
答:"字符"选项那里按下图选择就可以了.这样swf文件只多了10个数字的矢量信息,文件不会大很多.



问:现在我要做一个导航菜单,里头用动态文本设置标签,而且动态文本需要使用特效的,该怎么做呢?
答:作为导航菜单,你的栏目一般都比较固定,所以,你的菜单项里用过哪些字就嵌哪些字的轮廓就可以了.(见下图)



这样,下次要更新栏目的时候,打开源文件,改文本值的同时,也相应地改变嵌入的字体轮廓.

问:但是更多的时候,要载入文本,而且内容根本就不知道.就好像这个:



我载入的歌词内容真的不知道,而且也不排除有英文,日文等,而且我又需要遮罩的效果,这该怎么做才能既有效果,又不会使文件变大呢?
答:虽然不能用遮罩,但是遮盖还是可以的,在本歌词播放器中,真正越出遮罩的部分只有以下红色标记的区域.



所以,在红色标记区域画两块跟背景色一样的矩形,盖住动态文本就可以了.
问:如果背景复杂些,不是单一颜色,而且可能有多个图层,那处理起来不就很麻烦?万一背景改了,或者要移动动态文本,那改起来岂不是很难?这问题可以解决吗?
答:遇到这种情况,建议把背景部分转换为一个元件,然后背景层上面放文本,文本上再放一层,内容跟背景层一样,背景层上面再放一层,用于遮罩一个背景层.其形状就是红色区域的形状(最终效果如下图)



如果要改背景的话,就直接修改背景元件,要移动文本的话,就把文本和遮罩一起移动,操作比较方便.
问:跟上面一样,也需要所有字符都能显示,但是要做透明效果,又该如何呢?
答:假设现在要用动态文本做这么个效果.

[upload=gif]UploadFile/2005-11/20051118165451450.gi

那是不是非要嵌入字体轮廓才能实现呢?
答案是否定的.
这个效果笔者用Flash做的,可能大家会想到这是用Alpha补间实现的.其实笔者是用了色调补间来做的,第一帧色调白色,最后一帧色调"无",文本本身红色.
这说明了,在背景为纯色的情况下,可以用色调来代替Alpha,而色调虽然是特效,但是它实际上只是颜色的复合,结果让文本显示单一颜色,调用设备字体就可以显示出来.所以,在这种情况下,可以用色调效果来取代透明效果,以避免字体轮廓的嵌入.
但是如果背景本身是复杂的图片,或者是渐变色,多个色块组成的话,就非得要用透明度了.如果要避免字体轮廓的嵌入,建议采用一些替代效果,笔者会在后面给大家介绍替代效果的一些参考方案.
问:旋转的可以解决吗?
答:因为旋转根本上改变了点阵的分布(假如用设备字体),所以必须使用矢量,也就是嵌入字符,所以,笔者也会提供一些替代效果.
问:倾斜也好像不行,又该如何解决呢?
答:倾斜其实是缩放与旋转的结合,所以也是需要字体轮廓(

相关文章

精彩推荐