Flash中所谓逐个显示大段文字就是一个字一个字显示出来,像电脑打出来那种效果。下面通过典型案例来加以详细分析,进而从中发现制作此类特效的共同点和规律。
一、案例1
制作任务:情人节贺卡之文字逐个显示特效制作。
制作要求:逐字显示“又是一个没有情人的情人节,像这样的节日你还要我度过几个?或许时间真的是检验爱情的唯一的标准,但是你知道爱情也是有好多种的。在这没有结束的等待中我害怕我的感情变老,除了我的爱,这世界上有太多的不确定,这其中包括你,还没有确定的你的爱。我只想问你一句:爱不爱我?”
制作步骤:
(1)启动Flash,建立“文字”图层;
(2)在“文字”图层的舞台上利用文本工具插入一个动态文本,命名为“love”,设置为多行显示,靠左对齐,至于动态文本的大小位置以及显示文字的属性可在之后根据需要进行调整。
(3)在“文字”图层上面新建一图层,命名为“控制代码”,在第1空白关键帧输入脚本:
x = 0;
wenben = " 这里放置需要输出的大段文字,就是上面那段话";
“x”是一个变量,初始化为0,用来统计当前需要输出的字数,“wenben” 是一个字符型变量,用来放置需要逐字输出的大段文字。
(4)在“控制代码”图层第2帧处插入空白关键帧,输入脚本:
if (x <= mblength(wenben)) {
x++;
love.text = mbsubstring(wenben, 1, x);
} else {
gotoAndStop(5);
}
以上控制脚本代码的控制思路:首先采用条件判断语句IF判断当前显示的位置是不是已经到了文本段的末尾,换句话说有没有显示完大段文字,如果没有的话就继续在动态文本框上显示,让当前变量“x”累加,向后移动一个位置,指向下一个文字;如果显示完毕,就直接执行跳转语句“gotoAndStop(5)”转到第5帧执行“stop()”,结束显示。
(5)在“控制代码”图层第3帧处插入普通帧,目的是减缓文字显示的速度,能够更加清晰地看到逐字显示的效果。
(6)在“控制代码”图层第4帧处插入空白关键帧,输入脚本“gotoAndPlay(2);”,目的是回到第2关键帧继续条件判断,是继续显示还是结束显示。
(7)在“控制代码”图层第5帧处插入空白关键帧,输入脚本“stop();”,结束显示。
最终的图层以及时间线如下:
(8)最后,保存,Ctrl+回车测试。
以上“算法”是解决此类问题的一种行之有效的方法,这是笔者在实践当中总结出来的,简单实用,容易理解。但是“算法”是什么,算法就是解决问题的方法,方法可以不是唯一的。上述任务的完成,主要核心是采用脚本来控制,利用条件判断语句来进行判断,这就是解决此问题的关键和规律,因此,只要抓住问题的规律可以有多种方法,譬如:
第一步,使用文本工具在舞台把你要逐个显示的文字输入后,属性改为动态文本,并设置动态文本的变量为“mytext”。
第二步,在第2帧处插入关键帧,并设置第2帧中动态文本的变量为“newtext”,在第4帧处插入帧。
第三步,新建图层“控制代码”,在“控制代码”层第1帧中加入脚本:
n=1;
在“控制代码”层第2帧插入关键帧,加入脚本:
n++;
newtext = mytext.substr(0,n)
if (n>mytext.length) {
stop();
}
在“脚本”层的第4帧插入关键帧,输入脚本:
gotoAndPlay(2);
最后,保存,Ctrl+回车测试。
虽然这两种方法在步骤和具体实现方面有些不同,但是其核心和规律是不变的,都是采用脚本来控制,都是采用条件判断语句来判断控制。
·教学教法·中职Flash教学中逐个显示大段文字的技巧探析
二、案例2
制作任务:心灵鸡汤之文字逐个显示特效制作。
制作要求:逐字显示“有些事不是我过于执著,而是懂得了放弃,你应该明白,是我不想让你过的太累太苦,你远比我要承担的更多,甚而疲于奔波。正如你说的:爱情是两个人的事,婚姻则是两个家庭的事。生命无常,聚散不定,相隔虽然不遥远,可这一段路以及路上的荆棘足以摧毁行走的方向,我们看不到路边那如诗如画的风景,反而走的筋疲力尽,心力交瘁。哪怕我十二分的情愿和努力,最终换来的还是支离破碎。”
要很好的完成此特效,采用以上方法完全可以解决,之所以还要再次提出此类似问题,是想采用另外的“方法”来制作,让大家体味到Flash动画制作的灵活性和趣味性,适合不同人群的制作思路,所谓“世上的路有千万条,我只选最近的那条路”就是这个道理。
制作步骤:
为了保持动画制作步骤的完整性,所以还是把详细的制作过程详述如下:
(1)启动Flash,建立“文字”图层;
(2)在“文字”图层的舞台上利用文本工具插入一个动态文本,命名为“mytext”,设置为多行显示,靠左对齐,至于动态文本的大小位置以及显示文字的属性可在之后根据需要多次调整。
(3)在“文字”图层上面新建一图层,命名为“控制代码”,在第1空白关键帧输入脚本:
n=0;
text=" 这里放置需要输出的大段文字,就是上面那段话";
(4)在“控制代码”图层第2帧处插入空白关键帧,输入脚本:
n++;
mytext.text=mytext.text+text.substr(n,1);
if (n>text.length) {
stop();
}
以上代码的功能跟前面的相似,只是具体的执行过程有些差别,不过同样可以实现大段文字的逐字显示效果。
(5)在“控制代码”图层第3帧处插入空白关键帧,输入脚本“gotoAndPlay(2);”,目的是回到第2关键帧继续条件判断。
最终的图层以及时间线如下:
(6)最后,同样的,保存,Ctrl+回车测试。
三、Flash中逐字显示大段文字之进阶:打印机打字效果特效的制作
新建flash文档,记住建AS3.0文档。然后,导入一个打字声音素材(只有一声的那种)到库中,在库中右击声音元件,点“连接”(flash8,cs3)或“属性”(flash cs4),在“为ActionScript导出”前打钩,在“类”文本框中输入一个类名称,我的名称是:dzj,“确定”后会弹出一个对话框,再“确定”。
下面打开帧动作面板写代码。
首先声明一个字符串对象,将要打出的文字包含进去:
var mystr:String = "生命无常,聚散不定,相隔虽然不遥远,可这一段路以及路上的荆棘足以摧毁行走的方向,我们看不到路边那如诗如画的风景,反而走的筋疲力尽,心力交瘁。哪怕我十二分的情愿和努力,最终换来得还是支离破碎。";
然后,声明一个变量,存储字符串的字符数,备用:
var strcd:Number = mystr.length;
接下来创建文本框,设置宽度,位置和缩放:
var mytextbox:TextField = new TextField();
mytextbox.width = 300;
mytextbox.x=120;
mytextbox.y=100;
mytextbox.wordWrap = true;
创建一个文本格式对象,设置文本的格式:
var strformat:TextFormat = new TextFormat();
strformat.bold = true;
strformat.color = 0xffff00;
strformat.size = 20;
将文本添加到显示列表:
addChild(mytextbox);
下面创建一个函数,将字符串内容添加到文本上,并调用打字声音,因为笔者后面会用Timer类实例来调用函数,用 event:TimerEvent,字符串的charAt(i)方法可以提取字符串中的第i个字符。文本框在有了内容后调用 setTextFormat()方法才会有作用,所以在这里才用它。
var i =0;
function xs(event:TimerEvent):void{
mytextbox.appendText(mystr.charAt(i));
i++;
mytextbox.setTextFormat(strformat);
新建一个dzj类,即我们导入的声音,它将继承Sound类的属性和方法。所以用play()播放它,这样每加一个字符就会出现一声打字声。
var sy:dzj = new dzj();
sy.play();
}
下面创建Timer类,设置每300毫秒调用一次xs函数,为文本添加一个字符,一共调用字符串的个数那么多次:
var jg:Timer = new Timer(300,strcd);
jg.addEventListener(TimerEvent.TIMER,xs);
jg.start();
测试影片,效果出来了。
通过以上典型案例的剖析,我们可以得到完美解决此类问题的方法,总结出这些方法的共同点,举一反
三,灵活应用,从中发现解决问题的规律: (1)都是通过脚本代码的方式来求解问题,所以对Flash中常用的脚本语言要有基本的掌握,特别是各种类型变量的定义以及初始化、条件判断语句IF的掌握及其灵活应用、函数(类)的自定义以及调用等等。
(2)制作过程不外乎有以下基本步骤:
1)在单独图层上定义动态文本,进行命名和设置其基本属性。
2)在另一图层上进行脚本代码的输入及其调试,其基本思路是:首先进行控制变量的初始化,一般是0或者1;其次是在不同的帧上输入核心控制代码(主要是IF语句)进行条件判断,是继续进行文字显示还是结束显示;最后在其它帧上输入跳转语句或停止语句。
3)都是通过动态文本的方式输出大段文字的,因此对于动态文本的基本属性的设置要有熟练的掌握。
4)因为脚本语句当中包含一些基本函数,因此对于字符串截取函数substr()的使用和掌握必须熟悉。
只要真正掌握了解决此类问题的共同点和规律,不管怎样变化,万变不离其宗,他山之石,可以攻玉,应用规律去解决问题,可以达到举一反三得心应手的效果,能更好地促进中职学校动漫设计与制作专业课程的教学,从而让学生轻松制作出更加激动人心的动画作品。
|
|
来自: 伊人祥龙 > 《Flash源代码》