精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网页软件>FLASH教程>正文

Flash MX 编程深层次应用-初级特效(1)


来源:站长站 时间:06-09-21 点击: 点击这里收藏本文
第2章 ActionScript初级特效制作

2.1 文字特效(1)

    

所谓文字特效就是对Flash MX中出现的各种文字通过特殊处理来创建与制作各种各样的效果,这些效果一般来说都可以在动画中用到。在本书的后面会有专门的部分讲解用一些文字特效软件来产生相应的特效,这里主要讨论的是如何用程序来实现各种特效与控制。

2.1.1  酷打字效果

Flash中经常需要输入字符,但是如果有一个很酷的打字效果将给动画的交互增色不少。请看下面的代码:

myObj = new Object();

//定义尺寸大小为36Times New Roman字体,颜色值为0x448811

//同时字符加粗显示

myFormat= new TextFormat("Times New Roman",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  显示字体列表

在动画制作与交互过程中经常要遇到大批文字显示的问题,一般解决方式有两种:一种就是用Flash MX的组件功能(Component),把这段文字与对应的滚动条关联起来,然后用滚动条进行控制(有关这种方式会在后面的战斗游戏中讲解);这里要讲的是另一种控制方法,即根据鼠标的位置来控制文本的自动滚动。

先让我们看一段程序:

userFonts = TextField.getFontList();

userFonts.sort();

_root.createEmptyMovieClip("fontList",i);

for(i=0; i<userFonts.length; 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 = new TextFormat(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)是Flash MX中新加入的对象,Flash 影片中的所有动态文本字段(Dynamic Text)及输入文本字段(Input Text)都是 TextField 对象的实例。用户可以在属性检查器中为文本字段指定实例名称,并且可以使用 TextField 对象的方法和属性与脚本一起对文本字段进行操作。TextField 对象从 Object 对象继承而来,若要动态地创建文本字段,可使用 MovieClip.createTextField 方法,其函数原型如下:

myMovieClip.createTextField (instanceName, depth, x, y, width, height)

instanceName表示这个文本框的实例名。

depth表示文本框的深度,与动画片断的深度有相同的含义。

x,y表示文本框在动画片断中的位置。

widthheight表示文本框的宽度与高度。这两个值与后面的_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._heightTextField._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.textHeightTextField.textWidth

 文本内容的高度与宽度,它取得的是文本字符的真实高度与宽度。

TextField.type

文本的类型。它的取值有两种,默认是第一种。当等于“dynamic”时表示是动态文本,它的内容的修改需通过程序来完成。

当等于“input”时表示是一个输入框,文本内容的修改可以由用户直接用键盘输入。

TextField.variable

文本变量名。这个值可以取得,也可以设置。文本对象与以前Flash版本中的文本框有所不同,要控制文本对象必须用实例名,而文本变量名则是以前版本的控制方法,两者一定要分清楚,如图2-4所示。

2-4




  把此文章收藏到:          
相关教程
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.