返回列表 回复 发帖

[原创]为大家解决动态文本的特效显示与文件大小之间的矛盾(望可置顶一段时间,以供大家参考)

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

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

[此贴子已经被作者于2005-11-18 21:02:52编辑过]

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



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



然后,遮罩也是一种特效,它是需要遮罩层与被遮罩层的轮廓叠加才能算出图形的形状,所以设备字体显示的动态文本也是不行的.
问:如何解决这个问题呢?
答:很简单的一个办法.选中动态文本以后,在属性面板里点"字符"按钮,选择"所有字符"就可以了.因为这样实际上是嵌入了字体的矢量信息,所以就可以进行特效的处理了.


2005-11/20051118164535648.jpg
2005-11/20051118164637935.jpg
2005-11/2005111816464175.jpg
问:上面的问题是解决了,可是这样生成的文件很大(几M到十几M),何解?
答:上面说了,嵌入字体实际上是嵌入了字体的矢量信息.如果你嵌入了所有字符,实际上你把整个字体文件都放到swf文件里头.
假设你用的是宋体,你可以进行如下操作:
打开系统的控制面板,并双击"字体"进入



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



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



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



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

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



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



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



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

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

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

2005-11/2005111816518634.jpg
2005-11/20051118165030684.jpg
2005-11/20051118165139506.jpg
2005-11/2005111816525933.jpg
2005-11/2005111816542691.jpg
2005-11/2005111816534935.jpg
2005-11/20051118164932633.jpg

2005-11/20051118165451450.gif (2.72 KB)

问:可以说说替代透明效果的参考方案吗?
答:如果要最终,长期显示透明效果,目前笔者还没有很好的替代方案,但是,如果是从透明到不透明的变化,就可以找到个替代方案.
以下面的效果为例.

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

显然,这种效果的实现需要字体轮廓,使文件变得很大.
所以,在这种情况下,就不要太执着于要这种效果,想个接近点的.
如果文本不能透明,那么文字出来的时候就会显得不自然,怎样才能有渐出效果呢?
笔者认为,可以在文本出来的时候,先拿些全不透明的东西先遮盖一下,然后让不透明的东西渐渐消失,就可以达到渐出的效果了.而且效果也不会比上面的差.

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

问:旋转呢?
答:像一行文字的旋转,其实每个字是绕着同一个点做圆周运动的结果.所以,可以把文字做成圆周运动的效果.而文字本身不转动.
原来想做的效果:

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

替代效果:

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

2005-11/20051118165749168.gif (7.83 KB)

2005-11/20051118165724945.gif (14.07 KB)

2005-11/20051118165654273.gif (21.1 KB)

2005-11/20051118165810421.gif (6.71 KB)

问:这只是一些特殊情况,实际上有些时候,有些效果根本无可替代的,怎么办?
答:在回答该问题之前,请先允许我讲几句话:
上述的效果是一些基本效果,在此基础上,很多效果都可以替代得很好,所以希望大家通过这些参考的替代方案,可以举一反三.
毕竟替代效果是解决动态文本显示以及文件大小之间的矛盾的,这两者往往不可兼得,所以,替代效果也不能达到两全其美.但是,大家如果能把思维发散出去,是可以想到比较好的替代效果的,有时可能比原来的效果还要酷.
下面讲下,真需要嵌入所有字体轮廓时,有什么办法减小文件的大小呢?
大家应该见过乱码吧.其实乱码也是调用字体文件来显示的.既然是乱码,我们没有必要让它显示出来.
那么,是否就把非乱码的字符都敲在字符选项那里呢?
显然这是件吃力不讨好的事情,也极其难保证能输入所有的正常字符.所以,这里介绍一个终极方案:修改字体文件.
字体文件怎么修改呢?介绍一个软件:Font Creator;
下载:(文件太大了,上传下了)
安装并破解后运行.启动后的界面如下:



现在,假如你要嵌入一种字体,操作如下:
菜单"File"-"Open",可以选择安装了的字体,也可以选择机器上其它字体文件.
然后,在打开的对话框里找到你需要用的字体(建议打开前先备份).



打开后,你会发现所有的文字都以矢量图的方式显示出来.



然后,如果你发现有些字符是以乱码的形式显示出来的,点中这些字(可以用Ctrl和Shift键来多选),按一下delete键就删除了.
接着保存文件,然后点"Font-install"(建议做这步之前,先关闭所有其它Windows程序),接着启动Flash(如果已经在运行,请重新启动)
现在,创建一个动态文本,选中你刚才编辑过的字体,然后嵌入字体轮廓.
导出一个swf文件,你就会发现,你的Flash文件将比以前要小(但是可能还会比较大,如果这样的话,就自己衡量下吧.根据需要再删除一些用到的可能几乎为0的字体).
问:Font Creator可以添加或修改文字吗?
答:可以.可以双击字符进入编辑状态以修改文字的形状.
这里,笔者做了个小玩意,是通过修改字体实现的.注意了,这不需要AS就可以实现的喔!

[upload=swf]UploadFile/2005-11/2005111817055302.sw
2005-11/2005111817037346.jpg
2005-11/2005111817014262.jpg
2005-11/20051118165942619.jpg

2005-11/2005111817055302.swf (3.77 KB)

不管怎么样,想顶起。顶了再认真看!
动态文本外套一个MC,用setMask() 就可以做遮照。
my_mc.setMask(mask_mc);
楼上的办法我试过了,不行的.
以下是引用HBrO在2005-11-18 19:54:59的发言:
楼上的办法我试过了,不行的.
可以的,
我做歌曲列表及载入外部文本常用这办法。
文字是你的签名。

[upload=swf]UploadFile/2005-11/20051118201153162.sw
[upload=fla]viewFile.asp?ID=283753[/upload]

2005-11/2005111820122185.fla (32 KB)

2005-11/20051118201153162.swf (395 Bytes)

你那是静态文本来的.
我太爱你了,救了我的命啊
真的很精彩呀
同意置顶几周!让更多人看到!
好帖!支持!
谢谢版主.
动态文本无法遮罩,值得关注楼主的帖子
写的不错 我大概了解了一下动态文本的意思了
动态文本肯定是可以用遮罩的,望楼主明查。
为楼主的认真态度鼓掌。
是可以遮罩,没错,只是文件会变得很大,所以才发么个主题.
而且那些是我在论坛里经常见到的问题.就把它放在这里了.
以下是引用HBrO在2005-11-18 20:36:25的发言:
你那是静态文本来的.

晕。你知不知道什么是动态文本哦。。。。晕死。

动态文本是可以实现遮罩效果的。

[upload=fla]viewFile.asp?ID=286781[/upload]
[upload=swf]UploadFile/2005-12/2005121144424398.sw

2005-12/2005121144424398.swf (269 Bytes)

2005-12/2005121144418263.fla (23 KB)

setMask(MovieClip.setMask 方法)

public setMask(mc:Object) : Void
使参数 mc 中的影片剪辑成为展示调用影片剪辑的遮罩层。
setMask() 方法允许具有复杂、多层内容的多帧影片剪辑充当遮罩(通过使用遮罩层,此操作是可行的)。如果在使用遮罩的影片剪辑中具有设备字体,则它们可以进行绘制但不能被遮罩。您不能将影片剪辑设置为它自己的遮罩,例如 my_mc.setMask(my_mc)
如果创建包含影片剪辑的遮罩层,然后对其应用 setMask() 方法,则优先调用 setMask(),并且这种调用是不可逆转的。例如,在名为 UIMask 的遮罩层中有一个影片剪辑,该遮罩层对另一个包含名为 UIMaskee 的影片剪辑遮罩层进行遮罩。如果在 SWF 文件播放时调用 UIMask.setMask(UIMaskee),从这时起,UIMask 将由 UIMaskee 遮罩。
若要取消用 ActionScript 创建的遮罩,请向 setMask() 方法传递值 null。下列代码可以取消遮罩而不影响时间轴中的遮罩层。
UIMask.setMask(null);
首先谢谢各位的提醒.
我再一次试验(在MX和2004中都试过),结果是,我要遮罩半个文字,是不行的.
如果可能的话,大家可以用动态文本的遮罩做这么个效果给我看看吗?

前提:不使用嵌入字体,使用设备字体.
2005-12/200512122240765.jpg
谢谢·闪吧还是好人多呀!
支持版主跟他加分!

虽然还是有争议

虽然还是有争议,但是真的是好贴!一定可以加分的!
楼主真热心!难得一见的好人啊!今天又学到了不少知识。。。真的谢了!
不错。。。
写得非常好,我要顶
严重支持,顶~~~!◎¥#……※……(
谢谢分享,我的问题得到了解决

Re:[原创]为大家解决动态文本的特效显示与文件大小之间的矛盾(望可置顶一段时间,以供大家参考)

可以滴啊,8大的,才1K 使用滴是设备字体:)

Re:[原创]为大家解决动态文本的特效显示与文件大小之间的矛盾(望可置顶一段时间,以供大家参考)

楼上的是放在MC里的是吗 嘿嘿 不错 是可以 不过我顺便问个问题 放在MC里的动态文本我老是不能外部载入文本 怪事了 在主场景中的又得 顺便可以回答我吗 谢谢了
返回列表