在AS3开发中,计时器应该是最常见的组件了,关于各种计时方法也是层出不穷,一般来说,各种方法都会满足我们的需要,但是我们还是会遇到一个让人头痛的问题,那就是精度。

由于Flash是解释运行,限于FP的虚拟机有诸多限制,所以不要指望能和C++那样拥有可以到达毫秒级的高精度计时,甚至连微秒级别的计时也不容乐观,我们今天就来探讨一下常用的计时方法和他们的差别。

1 Event.ENTERFRAME事件

这个应该是最常见的了,几乎很多计时都用这个事件。它表示帧频,也就是说,每秒钟播放多少个帧,最新的CS5版本默认是24帧,早期的版本默认是12帧,这个是由于为了弥补和提高早期动画不流畅的问题而提高了帧率,事实也证明,人眼对于每秒30帧以上的画面切换就不会再感到闪烁,对于Flash,24帧就足够了

Event.ENTERFRAME事件虽然好用,但是在FP10.1版本以后,Adobe为了解决Flash内存占用的问题,做了一个优化:那就是如果当前的Flash,包括FP中本地和WEB页面上的动画,没有处于焦点状态,也就是说有其他窗口遮盖了Flash,那么它会自动降频,降为2帧/秒来运行,这样的话计时就大大不准了,这种方法不太实用时间类的计时。

2 Timer

Timer真是让人既爱又恨,不可否认的是,Timer的确是一个非常方便的计时器组件,但是他的精度实在是太低了,1个小时中间我见过的误差能有几分钟,我们也可以测试一下Timer的精度:

view source print?
01.var TestTime:Timer = new Timer(1000);
02.TestTime.addEventListener(TimerEvent.TIMER,OnTimer);
03.TestTime.start();
04. 
05. 
06.private function OnTimer(e:TimerEvent){
07.var tick = getTimer();
08.trace(tick);
09.}

getTimer()是获得Flash运行到现在的毫秒数,运行上面的代码我们会发现,每次trace的结果都忽大忽小,按道理说应该是按照一定的固定数字增加才对,但是这个数字并不固定,虽然trace会占用一部分时间,但是总的来说,Timer的精度还是不容乐观。

3 setInterval()方法

这个是按照指定的毫秒数去不断运行一个方法,但是和Timer差不多,而且setInterval()本身的机制需要Flash不断的去调用,因此也不是很理想。

4 getTimer()方法

有人说用getTimer()来计时,理由是它获得的是系统所经过的毫秒数,不错,但是你怎么来调用这个方法呢?还是要在Timer或者ENTERFRAME里调用,俗话说上梁不正下梁歪,就算getTimer再精确,由于调用它的方法不精确,所以也没有多大意思

5 Tween

Tween也可以计时,这个一般人好像并不会用到,但是用Tween来做计时有个明显的好处就是,他不会受WEB页面的影响,因为有不少人反映在WEB里播放Flash有的机器快有的慢,如果用Tween来计时就没有这个问题,具体原因我也说不清,但是我的确用这个方法解决了曾经一个Flash在不同浏览器计时不准确的问题。

以上都是常用的计时方法,只能根据需要取舍,如果大家有更好更精确的计时方法也欢迎提出,需要提示一点的是:Timer用的越多效率越低,误差也越大,不知道FP10.2对于这些问题有没有实质性的改进。

Flash中的计时器相关推荐

  1. flash中制的SWC组件怎样导入到flex中使用

    flash中制的SWC组件怎样导入到flex中使用 2010-04-30 11:18 在使用FLASH导出SWC组件文件后,放入项目的LIB文件夹,然后要用实例化一个对象才能进行时操作使用, 但要记得 ...

  2. python中time的用法_python中的计时器timeit的使用方法

    本文介绍了python中的计时器timeit的使用方法,分享给大家,具体如下: timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过pytho ...

  3. 使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash

    不容易啊,终于把 将MDK程序下载到我的mini2440开发板上的nand flash的方法找到了,我是利用韦东山老师的那套方法即利用DNW和supervivi下载到nand flash的.当然,只是 ...

  4. STM32如何从串口接收数据,取出数据中的密码段再保存到flash中。

    STM32如何从串口接收数据,取出数据中的密码段再保存到flash中 STM32如何从串口接收数据,取出数据中的密码段再保存到flash中u8 Usart2_buf[256]; unsigned in ...

  5. 如何使用jlink从flash中读取数据保存为bin文件到本地

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/skdkjxy/article/deta ...

  6. python程序运行时间计时软件_python中的计时器timeit的使用方法

    这篇文章主要介绍了关于python中的计时器timeit的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 本文介绍了python中的计时器timeit的使用方法,分享给大家,具 ...

  7. [转载]C#中各种计时器

    1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch) Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 S ...

  8. python计时器timeit返回秒数_python中的计时器timeit的使用方法

    本文介绍了python中的计时器timeit的使用方法,分享给大家,具体如下: timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过pytho ...

  9. 在Flash中调用xml文档

    在Flash中调用xml文档需要用到XML类和XMLNode类中的一些方法和属性.这里我们就不需要用到那么多.把用到的方法和属性列出来: XML类:       XML.ignoreWhite;//处 ...

  10. flash中Stage,stage,root和this的区别用法

    转载自:http://aresleecool.blog.163.com/blog/static/120715798201011895334718/ http://cctv566888.blog.163 ...

最新文章

  1. delphi:多态置换原则
  2. 3个月300个VR“体验馆”?张近东这句大话靠谱么?
  3. ueditor1_4_3_3编辑器的应用
  4. 不同用户同时并发测压_程序猿学GO:并发
  5. mybatis generator使用总结
  6. 190225每日一句
  7. 计算机粉碎文件后电脑桌面没有画面,我电脑桌面上自己新建的一个文件夹,用完后删除不掉,用360强力粉碎也不管用,删掉一开机就出来了,求解决...
  8. Web自动化测试学习笔记
  9. 网络:IP基础知识总结
  10. 自动发片q机器人_寻片机器人(微信群自动回复工具)V2.6.853 正式版
  11. Android面试题之Activity篇
  12. Web2.0与Web3.0的区别是什么
  13. 在Java中如何跳出当前的多重嵌套循环?
  14. 对图片进行锐化处理,通俗易懂!
  15. php根据日期判断星座if函数,js根据日期判断星座的代码
  16. 二分查找【思路】【递归】
  17. opencv图像处理之图像平移
  18. 树叶贴画机器人_树叶贴画怎么保存塑封
  19. matlab/simulink电力电子仿真三相可编程电压源three phase programmable voltage source的设置与使用
  20. Pr 入门教程「55」如何制作电影图?

热门文章

  1. 01.Matlab文件类型
  2. 大数据技术笔记之数据采集和预处理
  3. 用Python+Appium自动写网课考试
  4. 室友转行软件测试,月薪1.4万,天天摸鱼没事干
  5. matlab损耗函数曲线,MATLAB 损失函数画图
  6. 基于Objective-C的iOS开发--入门篇
  7. UE4联网机制和多人游戏总结 (第一部分)
  8. JAVA王思聪吃热狗程序_易语言制作王校长吃热狗游戏的源码
  9. python项目方案书模板格式_项目策划书格式及范文
  10. 前程无忧岗位数据爬取+Tableau可视化分析