[AS3]as3下随机延迟效果
利用timer计时器或者时间轴上动画的安排,可以实现在一定延迟后出现某个动画的效果。不过这种延迟是事先安排好的,时间的长短固定。要实现随机延迟,就一定要用到Math.random()方法和配套方法。例如在上面的例子中:
设置了一个变量:var starTime:int=100;//随机延迟的基数。这个基数可以随意设置,但是如果数字很大,那么产生随机延迟产生的最大延迟会很大,产生长时间延迟的次数会增多。
在设置基数之后,在执行动画效果之前加一个判断,当在 0-基数 之间产生指定的值时,才能执行下面的代码,就可以产生一定的延迟,但是由于使用了random()方法,所以长短随机,可能很快产生指定值,可能很慢产生 指定值,也可能多次调用不产生一次指定值。此外,影响这一方法的另一个重要因素是帧频的设置,不同的帧频,延迟的长短也有不同。
例如:
- //当前帧频为36fps
- this.addEventListener(Event.ENTER_FRAME,onLiuStarMove);
- function onLiuStarMove(e:Event):void{
- if(Math.floor(Math.random()*starTime)==0){
- var l:StarFm=new StarFm();
- l.x=Math.random()*areaWidth;
- ll.scaleX=l.scaleY=Math.random()*1;
- l.rotation=Math.random()*-80;
- this.addChild(l);
- }
- }
在这里,一般把指定值设定为整数(0或者starTime的值)。那么Math.random()所产生的值是0-0.9999...的数字,需要对其进行取整。但是用Math.round()和Math.floor()的效果是有区别的:
Math.round()是四舍五入,因此如果出现大于或等于0.5的情况,会进位,那么产生0或者starTime的机会会变少。动画效果产生的率会因此降低。
Math.floor()是舍去小数,因此产生0或者starTime的机会会变多。动画效果产生的频率会提高。
热门文章推荐
- [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示例