Flash中的计时器
在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的精度:
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中的计时器相关推荐
- flash中制的SWC组件怎样导入到flex中使用
flash中制的SWC组件怎样导入到flex中使用 2010-04-30 11:18 在使用FLASH导出SWC组件文件后,放入项目的LIB文件夹,然后要用实例化一个对象才能进行时操作使用, 但要记得 ...
- python中time的用法_python中的计时器timeit的使用方法
本文介绍了python中的计时器timeit的使用方法,分享给大家,具体如下: timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过pytho ...
- 使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash
不容易啊,终于把 将MDK程序下载到我的mini2440开发板上的nand flash的方法找到了,我是利用韦东山老师的那套方法即利用DNW和supervivi下载到nand flash的.当然,只是 ...
- STM32如何从串口接收数据,取出数据中的密码段再保存到flash中。
STM32如何从串口接收数据,取出数据中的密码段再保存到flash中 STM32如何从串口接收数据,取出数据中的密码段再保存到flash中u8 Usart2_buf[256]; unsigned in ...
- 如何使用jlink从flash中读取数据保存为bin文件到本地
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/skdkjxy/article/deta ...
- python程序运行时间计时软件_python中的计时器timeit的使用方法
这篇文章主要介绍了关于python中的计时器timeit的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 本文介绍了python中的计时器timeit的使用方法,分享给大家,具 ...
- [转载]C#中各种计时器
1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch) Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 S ...
- python计时器timeit返回秒数_python中的计时器timeit的使用方法
本文介绍了python中的计时器timeit的使用方法,分享给大家,具体如下: timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过pytho ...
- 在Flash中调用xml文档
在Flash中调用xml文档需要用到XML类和XMLNode类中的一些方法和属性.这里我们就不需要用到那么多.把用到的方法和属性列出来: XML类: XML.ignoreWhite;//处 ...
- flash中Stage,stage,root和this的区别用法
转载自:http://aresleecool.blog.163.com/blog/static/120715798201011895334718/ http://cctv566888.blog.163 ...
最新文章
- delphi:多态置换原则
- 3个月300个VR“体验馆”?张近东这句大话靠谱么?
- ueditor1_4_3_3编辑器的应用
- 不同用户同时并发测压_程序猿学GO:并发
- mybatis generator使用总结
- 190225每日一句
- 计算机粉碎文件后电脑桌面没有画面,我电脑桌面上自己新建的一个文件夹,用完后删除不掉,用360强力粉碎也不管用,删掉一开机就出来了,求解决...
- Web自动化测试学习笔记
- 网络:IP基础知识总结
- 自动发片q机器人_寻片机器人(微信群自动回复工具)V2.6.853 正式版
- Android面试题之Activity篇
- Web2.0与Web3.0的区别是什么
- 在Java中如何跳出当前的多重嵌套循环?
- 对图片进行锐化处理,通俗易懂!
- php根据日期判断星座if函数,js根据日期判断星座的代码
- 二分查找【思路】【递归】
- opencv图像处理之图像平移
- 树叶贴画机器人_树叶贴画怎么保存塑封
- matlab/simulink电力电子仿真三相可编程电压源three phase programmable voltage source的设置与使用
- Pr 入门教程「55」如何制作电影图?