·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

深入理解flash函数(AS2)(5)

时间:2011-06-24 14:56blogbus.com
十四、创建间隔函数 可以用函数来做的一件非常有用的事情就是:利用setInterval()命令创建间隔函数。通过使用setInterval()函数,可以指定一个函数和一个连续调用该函数的时间间隔(以毫秒为单位)。该函数返回一个ID(

  十四、创建间隔函数

  可以用函数来做的一件非常有用的事情就是:利用setInterval()命令创建间隔函数。通过使用setInterval()函数,可以指定一个函数和一个连续调用该函数的时间间隔(以毫秒为单位)。该函数返回一个ID(标识),该ID可以被用于稍后停止该间隔。下面是setInterval()函数与一个函数一起使用时的标准语法:

setInterval(function,interval[,param1…,paramN])

  setInterval()函数的第1个参数应该是一个函数的引用。这就是说,不应该包含函数调用运算符,即不能有括号。interval参数以毫秒为单位。如果给interval参数传递1000,则该函数将大约每秒钟被调用1次。但是要知道,函数被调用的间隔并不精确。Flash尽可能地按间隔来调用函数。但是,运行播放器的计算机的处理器与间隔应该多么精确之间是有冲突的。通过使用setInterval()动作,可以随意地给函数传递参数。紧接在头两个参数(必需的)之后传递给setInterval()的任何参数,都将接着传递给函数。例如,下面的例子显示了一个使用两个参数的writeMessage()函数。通过使用setInterval()可以告诉Flash,每隔1000毫秒就调用该函数,并将两个值传递给该函数:

  1. function writeMessage(sName:String,sMessage:String):Void{   
  2. trace("Hello,"+sName+"."+sMessage);   
  3. }   
  4. var nwriteInterval:Number=setInterval(writeMessage,1000,"Joey","Good morning."), 

Flash开发者在使用setInterval()时,常犯的一个错误是:认为会在每次调用函数时计算通过setInterval()传递给该函数的变量。例如,上面的代码可能被重新写成:

  1. function writeMessage(sName:String,sMessage:String):Void{   
  2. trace("Hello, "+sName+"."+sMessage);   
  3. }   
  4. var sNameParam:String="Joey";   
  5. var sMessageParam:String="Good morning.";   
  6. var nWriteInterval:Number=setInterval(writeMessage,1000,sNameParam, SMeSsageParam); 

   用户可能认为:改变sNameParam或sMessageParam的值将导致在Output窗口中显示不同的值。但是,在每次调用wrlteMessage()函数时,并没有计算变量sNameParam和sMessageParam的值。相反,当调用setlrlterval()时,才计算它们一次。然后,那些值就被用于每次调用该函数。因此,尽管改变了这些变量的值,但传递给该函数的仍是相同的值。下面,让我们看一个例子,可以用它来检查Flash调用间隔函数的精确性。可以将该代码放置在一个新的Flash文档的主时间轴的第1帧中。

  1. function traceTimer():Void{   
  2. trace(getTimer()),   
  3. }   
  4. var nTimerInterval:Number=setInterval(traceTimer,200); 

  当进行测试时就会看到,该函数有规律地,按大约200毫秒的间隔被调用。但间隔是不精确的。如果用setInterval()来影响舞台中的动画的话,帧速率也可能对如何使用setInterval()产生影响。影片刷新舞台的速率只在视觉上等于该影片的帧速率。这就是说,如果在该影片中某些处理发生的速率高于帧速率,它就不会对舞台中的显示有影响。因此,假如用setInterval()来将一个MovieCllp实例移动越过舞台,并且帧速率被设置成1fps(每秒的帧数)时,然而该函数被调用的间隔却是10毫秒,那么在舞台上的移动就可能起波浪。正如下面的代码所示,通过在正被setInterval()调用的该函数中使用updateAfterEvent()动作,可以对此进行修补。updateAfterEvernt()动作指示Flash刷新显示器而不管帧速率。

  1. function moveRight(mA:MovieClip):Void{   
  2. mA._x++;   
  3. updateAfterEvent();   
  4. }   
  5. 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

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器