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

[AS3]as3下随机延迟效果

时间:2013-01-05 12:11违章之恋
利用timer计时器或者时间轴上动画的安排,可以实现在一定延迟后出现某个动画的效果。不过这种延迟是事先安排好的,时间的长短固定。要实现随机延迟,就一定要用到Math.random()方法和配套方法

利用timer计时器或者时间轴上动画的安排,可以实现在一定延迟后出现某个动画的效果。不过这种延迟是事先安排好的,时间的长短固定。要实现随机延迟,就一定要用到Math.random()方法和配套方法。例如在上面的例子中:

设置了一个变量:var starTime:int=100;//随机延迟的基数。这个基数可以随意设置,但是如果数字很大,那么产生随机延迟产生的最大延迟会很大,产生长时间延迟的次数会增多。

在设置基数之后,在执行动画效果之前加一个判断,当在 0-基数 之间产生指定的值时,才能执行下面的代码,就可以产生一定的延迟,但是由于使用了random()方法,所以长短随机,可能很快产生指定值,可能很慢产生 指定值,也可能多次调用不产生一次指定值。此外,影响这一方法的另一个重要因素是帧频的设置,不同的帧频,延迟的长短也有不同。

例如:

  1. //当前帧频为36fps 
  2. this.addEventListener(Event.ENTER_FRAME,onLiuStarMove); 
  3. function onLiuStarMove(e:Event):void{ 
  4. if(Math.floor(Math.random()*starTime)==0){ 
  5. var l:StarFm=new StarFm(); 
  6. l.x=Math.random()*areaWidth; 
  7. ll.scaleX=l.scaleY=Math.random()*1; 
  8. l.rotation=Math.random()*-80; 
  9. this.addChild(l); 

在这里,一般把指定值设定为整数(0或者starTime的值)。那么Math.random()所产生的值是0-0.9999...的数字,需要对其进行取整。但是用Math.round()和Math.floor()的效果是有区别的:

Math.round()是四舍五入,因此如果出现大于或等于0.5的情况,会进位,那么产生0或者starTime的机会会变少。动画效果产生的率会因此降低。

Math.floor()是舍去小数,因此产生0或者starTime的机会会变多。动画效果产生的频率会提高。

热门文章推荐

请稍候...

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

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