深入理解flash函数(AS2)(5)
十四、创建间隔函数
可以用函数来做的一件非常有用的事情就是:利用setInterval()命令创建间隔函数。通过使用setInterval()函数,可以指定一个函数和一个连续调用该函数的时间间隔(以毫秒为单位)。该函数返回一个ID(标识),该ID可以被用于稍后停止该间隔。下面是setInterval()函数与一个函数一起使用时的标准语法:
setInterval(function,interval[,param1…,paramN])
setInterval()函数的第1个参数应该是一个函数的引用。这就是说,不应该包含函数调用运算符,即不能有括号。interval参数以毫秒为单位。如果给interval参数传递1000,则该函数将大约每秒钟被调用1次。但是要知道,函数被调用的间隔并不精确。Flash尽可能地按间隔来调用函数。但是,运行播放器的计算机的处理器与间隔应该多么精确之间是有冲突的。通过使用setInterval()动作,可以随意地给函数传递参数。紧接在头两个参数(必需的)之后传递给setInterval()的任何参数,都将接着传递给函数。例如,下面的例子显示了一个使用两个参数的writeMessage()函数。通过使用setInterval()可以告诉Flash,每隔1000毫秒就调用该函数,并将两个值传递给该函数:
- function writeMessage(sName:String,sMessage:String):Void{
- trace("Hello,"+sName+"."+sMessage);
- }
- var nwriteInterval:Number=setInterval(writeMessage,1000,"Joey","Good morning."),
Flash开发者在使用setInterval()时,常犯的一个错误是:认为会在每次调用函数时计算通过setInterval()传递给该函数的变量。例如,上面的代码可能被重新写成:
- function writeMessage(sName:String,sMessage:String):Void{
- trace("Hello, "+sName+"."+sMessage);
- }
- var sNameParam:String="Joey";
- var sMessageParam:String="Good morning.";
- var nWriteInterval:Number=setInterval(writeMessage,1000,sNameParam, SMeSsageParam);
用户可能认为:改变sNameParam或sMessageParam的值将导致在Output窗口中显示不同的值。但是,在每次调用wrlteMessage()函数时,并没有计算变量sNameParam和sMessageParam的值。相反,当调用setlrlterval()时,才计算它们一次。然后,那些值就被用于每次调用该函数。因此,尽管改变了这些变量的值,但传递给该函数的仍是相同的值。下面,让我们看一个例子,可以用它来检查Flash调用间隔函数的精确性。可以将该代码放置在一个新的Flash文档的主时间轴的第1帧中。
- function traceTimer():Void{
- trace(getTimer()),
- }
- var nTimerInterval:Number=setInterval(traceTimer,200);
当进行测试时就会看到,该函数有规律地,按大约200毫秒的间隔被调用。但间隔是不精确的。如果用setInterval()来影响舞台中的动画的话,帧速率也可能对如何使用setInterval()产生影响。影片刷新舞台的速率只在视觉上等于该影片的帧速率。这就是说,如果在该影片中某些处理发生的速率高于帧速率,它就不会对舞台中的显示有影响。因此,假如用setInterval()来将一个MovieCllp实例移动越过舞台,并且帧速率被设置成1fps(每秒的帧数)时,然而该函数被调用的间隔却是10毫秒,那么在舞台上的移动就可能起波浪。正如下面的代码所示,通过在正被setInterval()调用的该函数中使用updateAfterEvent()动作,可以对此进行修补。updateAfterEvernt()动作指示Flash刷新显示器而不管帧速率。
- function moveRight(mA:MovieClip):Void{
- mA._x++;
- updateAfterEvent();
- }
- Var nMoveRInterVal=setInterval(moveRight,10, mCircle);
还可以在setInterval()中定义一个匿名函数,这就不需要传递函数的名字或对函数的引用了。
var nTimerInterval:Number=setInterval(function(){trace(getTimer());},200);
现在,知道如何为一个要被调用的函数设置一个间隔了,读者或许还想知道如何使一个正在被不停调用的函数停下来。换句话说,就是想知道如何清除间隔。通过调用clearInterval()函数就能非常简单地做到这一点,clearInterval()函数使用一个单独的参数,即表示应该被清除的间隔的ID。请记住,setInterval()会返回一个可以被用于指示该间隔的ID。下面的代码停止一个间隔,该间隔的ID已经被赋予 nTlmerInterval 了:
clearInterval(nTlmerInterval);
十五、小结
◆函数是一种将代码块组织到一起的方法,可以通过名字或引用来调用它们,从而一遍又一遍地使用它们。
◆函数可以作为子程序,即它们可以执行某些运算并返回一个值。
◆函数可以被命名,也可以匿名。这两种类型都有不同的优点和缺点。
◆通过使用为函数创建的arguments对象,可以调用一个调用函数,递归地调用一个匿名函数, 并且按数组而不是按单独的各个变量来使用传递给函数的各个参数。
◆定义可以在许多不同环境中使用的通用函数是值得的。
文章来源于:http://monw3c.blogbus.com/logs/6616610.html
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例