当前位置:我能学科网电脑教程Flash教程 → Actionscript制作的文字动画效果

Actionscript制作的文字动画效果

减小字体 增大字体 作者:佚名  来源:我爱学习教程家园  发布时间:2007-5-10 10:15:56
这篇教程将会讲述怎样用actionscript来做动画文字效果.为了能够完全的理解这篇教程,你应该懂得flash的基础知识以及变量,怎样复制mc,循环和mc的属性等等知识点.

方法

方法就是做一个叫做'letters'的mc,它还包含了一个也叫做'letters'的文本框(你也可以自行选择一个自己觉得更为舒服的名字).而这个mc又被嵌套在另一个叫'ani'的mc里,因为在这里包含着文字的动画过程.这样的结构使得在经过一段时间间隔之后会复制mc,然后根据一个变量来设定里面的文字并使之播放.而通过用'Set Property'函数我们就可以确定所有字母都被放到了正确的位置.

初始化环境

当你打开原文件的时候就会看到有三个层,不过只有'ani'层和'actions'层是必须的.在'actions'层的第一帧我们把环境初始化.下面是其代码:

text = 'The Passionate World is round. For days we sail, for months, and still the way is new; strange stars. Drawn to you, taut over time, ropes connect this floating floor to the wind, fraying into sound. To arrive is to sleep where we stop moving. Past the shoal of clothes to that shore, heaped with debris of words. A hem of salt, white lace, on sea-heavy legs. Love longs for land. All night we dream the jungle's sleepy electricity; gnashing chords of insects swim in our ears and we go under, into green.';
startx = 90; /*第一个字母的_x*/
starty = 45; /*第一个字母的_y*/
setProperty('_root.ani', _visible, false);
length = length(text);
linelength = 50;
kerning = 6;
charinline = 0;
linenumber = 1;
linespace = 12;
i = 1;
x = 1;
lettercount = 1;

其中第一个变量'text'就是我们想要它有动画效果的一段文字(这段文字是我从网上找到的Anne Michaels的一首诗).而接下来的两个变量是我们需要的水平方向和垂直方向的起始点.再下来我们把mc'ani'的显示属性设定成false(或者设定为0,结果都是相同的)使得它变的不可见.变量'length'表示我们需要的动画文字的长度是多少,而对于控制循环来说它是非常重要的.变量'kerning'表示字母之间的间隔,而变量'charinline'记录着每一行文字的运动轨迹.变量'linenumber'和'linespace'记录着一共有多少行和行间距.最后的几个变量中,'i'和'x'用于控制循环(我个人比较喜欢用两个变量,当然你也可以只用一个),而'lettercount'用来控制文字的消失.
制作文字

在第十帧有如下代码(帧数其实并不要紧,也可以是其他的帧,比如第二帧):

charinline = Number(charinline)+1;
if (Number(charinline)>=Number(linelength)) {
prevent = substring(text, i-1, 1);
if (prevent eq ' ') {
linenumber = Number(linenumber)+1;
charinline = 1;
}
}
duplicateMovieClip('_root.ani', 'ani' add i, i);
setProperty('ani' add i, _x, Number(startx)+Number(charinline*kerning));
setProperty('ani' add i, _y, Number(starty)+Number(linenumber*linespace));
set('_root.ani' add i add '.letters.letters', substring(text, i, 1));
i = Number(i)+1;
首先,我们把变量'charinline'加上1,这样做是因为我们要放入一个字母.再这之后我想知道的是在一行里同时出现多少字母比较合适.这样的话,我们在加一个变量'prevent',用它来保证每一个新加的字母不是出现在新的一行,而这个字母必须是一个词的一部分,并且放置的位置在(i-2)行上. 然后我们在把变量'linenumber'增加1并且把'charinline'设为1,这是因为我们起用了新的一行.接下来是复制mc'ani',把它定位并用Substring确定它一共包含了多少个字母.

从第十帧以后的几帧是表示文字之间的时间间隔.其中的关键帧里的代码如下:

if (Number(i)<=Number(length)) {
gotoAndPlay(10);
} else {
stop();
}

这些是用来停止动画的,并且会给主场景的变量'lettercount'加上1.如果变量'lettercount'的值等于我们所用的所有文字的长度的话,所有的文字都已经播放完了各自的动画并到达了预定的位置.

if (Number(x)<=Number(length)) {
tellTarget ('ani' add x) {
gotoAndPlay('end');
}
x = Number(x)+1;
}

这是做文字的淡出效果的.这些动作脚本会在主场景上被执行,而这也正是为什么我们要用'Tell Target'以及用'Go To and Play'跳到指定的标签'end'处的原因.在这里说明一下,如果'x'的值小于或者等于所有文字的长度我们就让mc('ani'&x)用'Go To and Play'跳转到'end'标签处.也就是说上面的事件在'ani1'淡出时被触发,因为我们在第一帧处把'x'的值设为了1.然后我们再给'x'上1就可以确定这些动作脚本何时被执行,应该是在'ani2'淡出的时候.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在MC:ani的时间线上我们可以在'end'标签里看到如下代码:

stop();
_root.lettercount = Number(_root.lettercount)+1;
if (Number(_root.lettercount) == Number(_root.length)) {
tellTarget ('/') {
gotoAndPlay('end');
}
}
淡出
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在主场景里接下来的帧里包括如下代码,它的作用是使上面的动作不断的反复执行:

gotoAndPlay(_currentframe-1); /*等同于gotoAndPlay(20)*/

~~~~~~~~~~~~~~

这里只是稍微讲了一下AS实现的方法,如有疑问可以http://dl.itbulo.com/'>下载原文件自己琢磨一下。
应该不难的。 <