正在加载...

TextFormat类的问题。
—————-
转载请注明出处,谢谢
by aw(www.awflasher.com)

今天,遇到要给一段文本设置格式,即使用 TextFormat类,配合调用文本的setTextFormat方法来实现,以前做过很多类似的试验,但是今天由于配合了flipTo的原型来实现一段动态文本动画效果,着实遇到了不少新问题。

先简单介绍一下flipTo原型,这是国外一个朋友自行开发并且pub到proto51的,可以实现文本的过渡动画,用起来屡试不爽。但是其对中文的支持似乎愚笨了一点,这是题外话了,因为我今天做的文本动画中,中文本不复杂。(代码可以去prototype的网站上找到。)

flipTo的原型,利用onEnterFrame的方法,不停的改变目标文本的内容,以达到隔一段时间更换一次显示,来实拟合出动画的效果。这便是今天遇到问题的关键,我在用flipTo动画之前,定义了一个txt_fmt对象,用来控制显示文本的颜色等属性,用静态(不用动画)显示,没有任何问题,txt_fmt的内容被明显加载到了目标文本上,颜色按照fmt定义中的那样显示,没有任何问题。但是使用flipTo之后,就出问题了,颜色、格式全部回了原样。

我百思不得其解,后来凭灵感猜测是文本的再设置的时候,fmt对象失效造成的,找到flipTo的原型内部代码,把每一次更新文本的后面都加了setTextFormat。这样问题便迎刃而解了。

但是,这样是不是显得有点傻……要修改人家原型的内部,总觉得不太放心。后来无意中看到text有一个setNewTextFormat方法,看了帮助才发现此方法用在这里正好合适。

总结:
text文本如果要设置格式,最好用setNewTextFormat方法,而不是setTextFormat,除非你的文本一成不变。而我想,实际应用中,这样的方法一般用于动态文本上,文本的内容更变得可能性应该还是很大的:)那么,是不是所有这种情况都要用setNewFormat呢,也不是。如果文本内容(注意,仅仅是内容)改变在格式改变之前,那么使用setTextFormat,也就是说,文本在格式确定之后是不会改变的;如果文本内容在格式确定之后会改变,比如字符串的一些操作或者重新赋值,那么使用setNewTextFormat。

例子:直接输入到Action面板上即可看到效果。

// Action by awflasher.com
/*
_root.createTextField("a1_txt",1,200,200,200,200)
trace(a1_txt)
a1_txt.text= "abb";
aa = new TextFormat()
aa.color = 0xcc0000;
a1_txt.setTextFormat(aa)

*/
/*

_root.createTextField("a1_txt",1,200,200,200,200)
trace(a1_txt)
a1_txt.text= "abb";
aa = new TextFormat()
aa.color = 0xcc0000;
a1_txt.setNewTextFormat(aa)
//a1_txt.text= "baa"; // 不改变文本内容,NewTextFomat不生效。
*/

还没找到您要的东西?Google试试看吧,
Google更注重原创、时效性好的文章:


本文相关评论: 一条都没有呢
[支持Ctrl+Enter]为了我们大家和家人的安全,留言请慎重!
声明:
1、本站仅与见过面的个人博客交换链接,见此文
2、留言时的头像是Gravatar提供的服务。如果您有兴趣并且有闲暇时间,可以看看这里的介绍