在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的精度:

var TestTime:Timer = new Timer(1000);
TestTime.addEventListener(TimerEvent.TIMER,OnTimer);
TestTime.start();
private function OnTimer(e:TimerEvent){
var tick = getTimer();
trace(tick);
}

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在不同浏览器计时不准确的问题。

转自http://www.zystudios.cn/blog/post/50.Shtml

Flash Timer的用法 计时器相关推荐

  1. Java程序中Timer的用法

    Java程序中Timer的用法 import java.io.IOException; import java.util.Timer; public class CheckTimer {/*** @p ...

  2. java中计时器的用法Timer和TimerTask的用法__java中利用Timer与TImerTask 计时器间隔执行任务...

    经常我们都会有这样的需求,要固定的每隔一段时间执行某一个任务.比如: 我们做一个缓存来减少与数据库的交互,而为了使缓存与数据库中的数据尽量达到同步,需要每个固定的一段时间去数据库中的数据是否有更新以达 ...

  3. 关于Timer的用法,先简单记下,稍后编辑

    (2008-07-21 09:46 博客搬家拾遗) Timer事件,即定时器事件,是在游戏编程中,经常使用的一个事件.借助它可以产生定时执行动作的效果.这篇文章,就和大家一起探讨一下如何使用SetTi ...

  4. Java中Timer的用法

    现在项目中用到需要定时去检查文件是否更新的功能.timer正好用于此处. 用法很简单,new一个timer,然后写一个timertask的子类即可. 代码如下: [java] view plainco ...

  5. python timer怎么用_python定时器(Timer)用法简单实例

    python定时器(Timer)用法简单实例 本文实例讲述了python定时器(Timer)用法.分享给大家供大家参考.具体如下: # encoding: UTF-8 import threading ...

  6. RH Timer for Mac(计时器软件)

    RH Timer是一款macOS平台的方便好用的倒计时软件,能够帮助我们在Mac上通过菜单栏快速设定倒计时定时器,只需点击并拖动即可.如果您玩游戏或观看连续剧,则无论如何都必须退出,因为即使您处于全屏 ...

  7. C#中Timer组件用法

    Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的.Timer组件也被封装在名称空间Syste ...

  8. C# Timer定时器用法

    System.Timers.Timer timer1 = new System.Timers.Timer(); timer1.Elapsed += new System.Timers.ElapsedE ...

  9. java timer线程结束_Java线程Timer定时器用法详细总结

    定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...

  10. 定时线程的使用 java_Java线程Timer定时器用法详细总结

    定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...

最新文章

  1. Foundation ActionScript 3.0.With Flash CS3 And Flex ..
  2. Java二进制位运算、移位运算、、
  3. 【cocos2d-x 仙凡奇缘-网游研发(2) 角色换线系统】
  4. php word组件使用方法,快速解决PHP调用Word组件DCOM权限的问题讲解
  5. 区块链与边缘计算(1)基本概念
  6. 利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?
  7. Shareplex 错误 can't open or read object cache file
  8. 5-2 决策树算法预测销量高低代码
  9. 前端学习(1758):前端调试值之快速以编辑状态查看一个站点的所有资源
  10. leetcode题库--63不同路径 II
  11. android源码分析网上随笔记录
  12. htc m7位置服务器,HTC M7 解锁教程(附htc one m7 解锁工具)
  13. php mysql 手机归属地_PHP 手机号码归属地查询代码 (API 接口 / mysql)
  14. freebsd协议栈学习
  15. 如何用MATLAB预测未来人口,使用matlab对将来人口总数进行预测
  16. 停止mysql服务的运行_启动和停止MySQL服务
  17. html布尔属性写法,HTML - 为什么布尔属性没有布尔值?
  18. Android WallpaperManager 同时设置桌面壁纸与锁屏的问题
  19. APP运营中地推应该怎么做
  20. Quorum入门2.0:Quorum-企业以太坊-开始尝试

热门文章

  1. 浅学一下XMind思维导图
  2. Linux内核编程《一》
  3. 计算机数据采集管理系统的结构和功能,计算机数据采集系统简介
  4. 淘宝API常用接口列表与申请方式
  5. 模拟电路——晶体管基础
  6. 安装matlab时常用模块,matlab 安装哪些模块
  7. 运筹学—线性规划单纯形表
  8. 主机前置耳机孔没声音
  9. honeywell Xenon TM 1900二维码扫描枪扫描不显示中文
  10. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))