Actionscript初级特效制作.docx
- 文档编号:3403599
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:28
- 大小:512.59KB
Actionscript初级特效制作.docx
《Actionscript初级特效制作.docx》由会员分享,可在线阅读,更多相关《Actionscript初级特效制作.docx(28页珍藏版)》请在冰豆网上搜索。
Actionscript初级特效制作
第2章Actionscript初级特效制作
2.1文字特效
(1)
所谓文字特效就是对FlashMX中出现的各种文字通过特殊处理来创建与制作各种各样的效果,这些效果一般来说都可以在动画中用到。
在本书的后面会有专门的部分讲解用一些文字特效软件来产生相应的特效,这里主要讨论的是如何用程序来实现各种特效与控制。
2.1.1 酷打字效果
在Flash中经常需要输入字符,但是如果有一个很酷的打字效果将给动画的交互增色不少。
请看下面的代码:
myObj=newObject();
//定义尺寸大小为36的TimesNewRoman字体,颜色值为0x448811
//同时字符加粗显示
myFormat=newTextFormat("TimesNewRoman",36,0x448811,true);
myObj.onKeyDown=function(){
i++;
_root.createEmptyMovieClip("L"+i,i);
//创建一个字体效果,其位置是在(10,10),其宽度与高度都是50
_root["L"+i].createTextField("myText",1,10,10,50,50);
//返回键盘输入的字符
_root["L"+i].myText.text=chr(Key.getAscii());
_root["L"+i].myText.setTextFormat(myFormat);
//设置初始产生时的字体大小为正常大小的5倍
_root["L"+i]._xscale=500;
_root["L"+i]._yscale=500;
//目标字体的位置,一行有30个字符,每个字符间隔是15个点
_root["L"+i].xTarget=(i%30==0)?
t=0:
15*t++;
_root["L"+i].yTarget=(i%30==0)?
++j*15:
j*15;
_root["L"+i].onEnterFrame=function(){
//控制字体的位置,从当前位置向后与向下偏60个点,以70%的速度递减
this._x+=(this.xTarget+60-this._x)*.3;
this._y+=(this.yTarget+60-this._y)*.3;
//控制字体的大小,按70%的速度递减,直到40%的大小为止
this._xscale+=(40-this._xscale)*.3;
this._yscale+=(40-this._yscale)*.3;
}
//如果字符超过100个就将字符移到-100位置点,其实就是相当于字体移出屏幕
_root["L"+(i-100)].yTarget=-100;
//如果字符超过130个就将以前的字符删除
_root["L"+(i-130)].removeMovieClip();
}
Key.addListener(myObj);
这段代码看似非常简单,但是内容很丰富,其中最精华的部分就是利用了数学的等比数列,也就是说每次字符移动的距离是上次距离的70%,当最终字符到达指定位置(xTarget,yTarget)时,字符的移动就停止了。
当然了,是看上去停止了,而程序实际上没有停止。
这种字体特效会随着字符的增加而加重计算的系统资源消耗,所以程序还设置了当字符数增加到130个时就开始自动清除以前的字符,这样才可以保证程序快速地运行。
这个特效虽然是个响应键盘输入的字符特效,但是可以轻松将它的思路修改成为另一种字符串特效,比如说,先把字符串存在一个变量里,然后再定时将它们一个个地取出来,通过上面的代码来驱动它。
上面程序运行的结果如图2-1所示。
图2-1
2.1.2 显示字体列表
在动画制作与交互过程中经常要遇到大批文字显示的问题,一般解决方式有两种:
一种就是用FlashMX的组件功能(Component),把这段文字与对应的滚动条关联起来,然后用滚动条进行控制(有关这种方式会在后面的战斗游戏中讲解);这里要讲的是另一种控制方法,即根据鼠标的位置来控制文本的自动滚动。
先让我们看一段程序:
userFonts=TextField.getFontList();
userFonts.sort();
_root.createEmptyMovieClip("fontList",i);
for(i=0;i //创建一个新的动画片断,包括相应的字体内容 _root.fontList.createTextField("userText"+i,i,30,i*25,300,25); _root.fontList["userText"+i].text=userFonts[i]; _root.fontList["userText"+i].border=true; //修改背景色 _root.fontList["userText"+i].background=true; _root.fontList["userText"+i].backgroundColor=0xffff00; //设置字体格式 displayStyle=newTextFormat(userFonts[i],18,0x000000); _root.fontList["userText"+i].setTextFormat(displayStyle); } _root.onEnterFrame=function(){ (_root._ymouse<200)? _root.fontList._y-=(_root._ymouse-200)*.1: _root.fontList._y+=(200-_root._ymouse)*.1; } 在上面这段程序中,先是返回一个字体的列表,然后对这个列表进行排序,之后,把这个列表中的全部字符串放到一个动画片断中,最后通过鼠标来控制这个包括了很多种字体的文字动画片断。 程序中用鼠标控制文本的是最后一个语句: _root._ymouse<200…,它通过感应鼠标离中心点200的距离,再用这个距离的0.1倍大小来作为每次文本移动的距离,从而实现鼠标控制文本。 程序运行结果如图2-2与图2-3所示。 图2-2 图2-3 1.文本框对象(TextField) 上面这段代码用到了文本框对象(TextField)与文本格式对象(TextFormat),下面分别进行一下介绍。 文本框对象(TextField)是FlashMX中新加入的对象,Flash影片中的所有动态文本字段(DynamicText)及输入文本字段(InputText)都是TextField对象的实例。 用户可以在属性检查器中为文本字段指定实例名称,并且可以使用TextField对象的方法和属性与脚本一起对文本字段进行操作。 TextField对象从Object对象继承而来,若要动态地创建文本字段,可使用MovieClip.createTextField方法,其函数原型如下: myMovieClip.createTextField(instanceName,depth,x,y,width,height) instanceName表示这个文本框的实例名。 depth表示文本框的深度,与动画片断的深度有相同的含义。 x,y表示文本框在动画片断中的位置。 width与height表示文本框的宽度与高度。 这两个值与后面的_width和_height属性相对应,在程序中也可以通过对这两个属性进行修改从而达到修改某个文本框的宽度与高度的目的。 在实例化文本框对象之后,就可以对文本框的相应属性进行设置与读取了。 下面列出一些文本框常用的属性,并做简短的说明: TextField.autoSize 控制文本的对齐方式及对应的尺寸。 如果为“true”,则表示文本框与内容相匹配,不会有多余的空白处;如果等于“left”,则是靠左对齐,同时扩展或者缩短文本框的右边及底边,以便可以放下全部内容,左边与顶部将保留相同的空位;如等于“right”,则是靠右对齐,同时扩展或者缩短文本框的左边及底边,以使文本框全部靠右并能放下全部的文本内容,右边及顶部保留相同空位;如果等于“center”,则是居中对齐,同时让文本保留在水平中心的位置。 TextField.background 控制文本的背景色是否显示,布尔变量。 为true时显示,为false不显示,默认值是false。 要设置背景色,这个值一定先设定为true。 TextField.backgroundColor 控制文本的背景色,默认值是白色0xFFFFFF。 即使当前没有背景,也可获取或设置此属性。 在Flash的旧版本中,文本的背景色是不能调整的。 如果实在需要背景色,大都是先设定文本无背景色,然后再放置一个有颜色的矩形在文本的下面,以达到模拟背景色的效果。 TextField.border 文本边框,布尔变量。 为true时表示有边框,为false时表示无边框,边框的颜色通过borderColor来控制。 TextField.borderColor 文本边框颜色,为颜色值变量,书写方式一般是0x######。 它与border一起控制边框的属性,即使当前没有边框,也可获取或设置此属性。 这项内容在旧版Flash中也是无法控制的。 TextField._height与TextField._width 文本框的高度与宽度。 修改这两个值仅仅会影响文本框的范围,不会影响文本的字体大小与边线的粗细。 TextField.html 控制文本是否为html文本,布尔变量。 如果它的值是true,就把文本按html方式显示,如果为false,即使文本内容是html格式也按纯文本方式显示出来。 TextField.htmlText html文本串。 在文本对象中,html文本串的内容与普通纯文本的内容存放的地方是不相同的,它们各自管理自已的内容,互不干扰。 当既有text又有html内容时,显示的是htmlText的内容。 如果在后面又使用文本格式对象设置了文本格式,那么文本格式就以文本格式对象为准。 TextField.length 返回文本的长度,它的值只能获取,不能设置。 当文本的长度发生改变时,它的值也同时改变。 注意在求长度的过程中像Tab键(“\t”)、换行符(“newline”)等相应的控制符都只占一个字符。 TextField.restrict 指示用户可输入到文本字段中的字符集。 如果restrict属性的值为null,则可输入任何字符;如果restrict属性的值为空字符串,则不能输入任何字符;如果restrict属性的值为一个字符串,则只能向文本字段中输入该字符串中的字符;如果需要支持连续字符串的输入,其范围可以使用短划线(-)进行指定。 可以使用\u转义序列构造restrict字符串。 如果此字符串以^开头,则先接受所有字符,然后从接受字符集中排除字符串中^之后的字符;如果此字符串不以^开头,则最初不接受任何字符,然后将字符串中的字符包括在接受字符集中。 TextField.text 当前文本的字符串内容,它与前面讲的htmlText相对应,只是它的内容仅显示纯文本内容。 TextField.textColor 当前文本的颜色。 属于颜色值,其书写方式为0x######。 TextField.textHeight与TextField.textWidth 文本内容的高度与宽度,它取得的是文本字符的真实高度与宽度。 TextField.type 文本的类型。 它的取值有两种,默认是第一种。 当等于“dynamic”时表示是动态文本,它的内容的修改需通过程序来完成。 当等于“input”时表示是一个输入框,文本内容的修改可以由用户直接用键盘输入。 TextField.variable 文本变量名。 这个值可以取得,也可以设置。 文本对象与以前Flash版本中的文本框有所不同,要控制文本对象必须用实例名,而文本变量名则是以前版本的控制方法,两者一定要分清楚,如图2-4所示。 图2-4 2.1文字特效 (2) 2.文本格式对象 能对文本进行控制的还有文本格式对象。 这个对象主要控制的是具体的文本格式,而文本框对象主要控制的是框的格式。 文本格式对象的创建方法如下: newTextFormat([font,[size,[color,[bold,[italic,[underline,[url,[target,[align,[leftMargin,[rightMargin,[indent,[leading]]]]]]]]]]]]]) 上面的内容并不是每项都要一一设置的,如果不想设置该项而使用默认值的话,可以直接用逗号跳过,如果某项后面的内容全部都用默认值,则全部可以不写了。 下面对这些参数做一些说明: font 它用一个字符串的形式来描述字体名称,这个名称要与真实字体名称完全相同。 对于中文字体,这项内容无法起作用,这也是为什么在图2-3的效果中,中文字体并没有被设置的原因。 不知这是不是FlashMX的Bug? size 它是表示字体的点阵大小。 这项值必须设置,否则字的尺寸将为0! 字将无法显示。 color 字体的颜色值,一般来说是按0x######的方式进行书写的,比如红色是0xFF0000,黄色是0xFFFF00,默认是黑色。 bold 字体加粗,是一个布尔变量,为true时表示加粗,为false时表示不加粗,默认是false。 Italic 字体变斜体,布尔变量,默认为false。 underline 文字下划线,布尔变量,默认为false。 url 超级链接。 如果为空串,则不会有超级链接的功能。 target 目标窗口。 这是设置有超级链接时,打开的窗口是自己(_self)、新窗口(_blank)、父亲窗口(_parent),或者是最顶层(_top)。 默认值是_self。 align 对齐方式。 等于left,就是靠左对齐,等于right就是靠右对齐,等于center就是居中对齐。 这个属性可以与文本框的autoSize属性进行联合设置。 leftMargin 左边界。 它表示第一个文本字符离左边框的距离,用点数来表示,取值范围从0~720。 rightMargin 右边界。 它表示最后的文本字符离右边框的距离,用点数表示,取值范围从0~720。 Indent 缩进方式。 它表示从左边界到第一个字符缩进的整数点数值,取值从–720~720。 leading 行距。 它表示每行字之前的间隔点数,取值范围从–360~720。 上面的这些参数都是文本格式的属性,都可以通过相应的方式来对它进行设置。 当然了,字符的属性不止这些,还有几个很有用的属性函数: TextFormat.tabStops 它是用来控制按Tab键时所能移动的空格数,默认值是4。 TextFormat.blockIndent 定义整个文本块的左边缩进字数。 块缩进应用于整个文本块,即文本的所有行。 相反,普通缩进(TextFormat.indent)只影响各段的第一行。 如果该属性为null,则TextFormat对象没有指定块缩进。 TextFormat.bullet 用来控制文本作为列表形式的出现,它是一个布尔变量。 如果为true,那么文本前面就会有一个项目符号。 如果对一个文本同时使用了数种不同的文本格式,那么不管这个属性是否为true,都不显示项目号。 在实际使用过程中,可以先进行创建,然后再修改某一项或者数项的内容,最后用TextField.setTextFormat(textFormat)来实施相应的文本格式。 它的实施有三种方式: TextField.setTextFormat(textFormat) TextField.setTextFormat(index,textFormat) TextField.setTextFormat(beginIndex,endIndex,textFormat) 这三种实质是差不多的,第一种已经在前面的程序中用到,第二种使用方法是让这个文本串的第“index”个字符使用这里定义的格式,第三种方法就是从“beginIndex”到“endIndex”的字符使用定义的格式。 这里的index,beginIndex,endIndex取值范围从0到TextField.length–1。 在看过这么多属性之后,我们来看看它们对效果可以做哪些变化: userFonts=TextField.getFontList(); userFonts.sort(); _root.createEmptyMovieClip("fontList",i); for(i=0;i<8;i++){ _root.fontList.createTextField("userText"+i,i,30,i*50,300,50); _root.fontList["userText"+i].text=userFonts[i]; _root.fontList["userText"+i].border=true; _root.fontList["userText"+i].borderColor=0xFF0000; _root.fontList["userText"+i].background=true; _root.fontList["userText"+i].backgroundColor=0xFFFF00; _root.fontList["userText"+i]._height=40; displayStyle=newTextFormat(userFonts[i],18); _root.fontList["userText"+i].setTextFormat(1,50,displayStyle); displayStyle_begin_char=newTextFormat(userFonts[i],30); displayStyle_begin_char.align="right"; _root.fontList["userText"+i].setTextFormat(0,displayStyle_begin_char); } 上面的程序去掉了鼠标控制部分,仅显示字体控制部分。 从图2-5中可以看出,每个字的间距拉大了,这是调整_height属性的结果;文本框的边框线变成了红色,这是通过设置borderColor属性的方式实现的;字体的第一个字符也做了放大,这是对第一个字符设置了不同的大小而产生出来的结果。 通过这些设置,可以让程序完成一些以前无法完成的功能,比如文档的下标的显示。 这个在以前根本无法解决,但现在可以通过设置相应字符的字体大小得到解决。 虽然还没有达到像排版软件那么方便,但至少可以解决了。 对于文档中的上标,虽然也可以采用这种方式,但实现起来比较麻烦,在这里就不讲解了,有兴趣的朋友可以自己试试。 2.2画面特效 (1) 画面特效是指那些通过程序自动生成的画面,或者在简单的画面制作之后通过程序来进行控制,从而完成那些用手工制作非常费时费力甚至是无法完成的特效,因而极大地加强了Flash动画的效果。 2.2.1 电视信号效果 在FlashMX特效中,有一种经常可以用到的效果就是电视线特效。 它主要用在黑色背景中,通过一些无序点与线的闪动达到这种动态的效果。 程序代码如下: Movieclip.prototype.makeScratch=function(name,n,color,alpha,x,y,radius,ratio){ with(this.createEmptyMovieClip(name,n)){ //画一条透明度为alpha的线 lineStyle(radius,color,alpha); moveTo(x,y); lineTo(x,y+(100/ratio)); } }; this.onEnterFrame=function(){ //产生20条这样的灰色半透明的线 for(varr=0;r<20;r++){ makeScratch("b_"+r,100+r,0x999999,random(60),random(Stage.width),random(Stage.height),random(10),random(200)); } }; 这段程序好像非常短小,其实却包括“动画片断函数原型的定义”这一重要知识点。 在很多地方,动画经常要用到某个函数,而这个函数又属于动画片断之中,这样就可以采用Movieclip.prototype.原型名=function(…)的方式来自定义原型。 当然了,这里的原型函数名可以自己随便写,完成定义后,在任何一个动画片断中就可任意使用这个自定义的函数了。 虽然自定义函数原型非常方便,但是大量地定义它会带来不良后果,因为每一个自定义的函数原型要占用一定的资源,如果大量定义的话,系统资源的消耗将增大,将会影响到其他程序的快速执行。 当然了,这个效果如果不用面向对象的编程来写,而采用普通的函数来写也是可行的。 onEnterFrame部分不变,函数原型定义部分程序改写成函数定义,代码如下: functionmakeScratch(name,n,color,alpha,x,y,radius,ratio){ with(this.createEmptyMovieClip(name,n)){ //画一条透明度为alpha的线 lineStyle(radius,color,alpha); moveTo(x,y); lineTo(x,y+(100/ratio)); } }; 其实也没有什么变化,只是函数的定义方式发生了一点小小的改变而已,执行的结果与上面一样。 为了让大家看清楚,背景色特意没有设成黑色,而是采用了深灰色,如图2-6与图2-7所示。 图2-6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Actionscript 初级 特效 制作
![提示](https://static.bdocx.com/images/bang_tan.gif)