对于大部分Flash开发者,都已经知道Flash的帧频、Timer计时并不是十分精确的。如果您已经做过这方面测试,可以略过这篇文章的前面一部分,在后面有关于Flash Player可变跑道的文章链接,希望对您有帮助。这篇文章的主要目的是让一些不知道Flash计时不精确和知道但又没有做过测试的朋友,来分享我的测试结果。我使用的Flex开发工具,并创建了一个ActionScript项目。

测试我尽量使用最简单的代码,下面是针对于Timer的测试代码,设置了一个20毫秒每次的Timer,为了简单我只计时5次:

package { import flash.display.Sprite; import flash.events.TimerEvent; import flash.utils.Timer; import flash.utils.getTimer; public class TimerTest extends Sprite { // 定义一个计时器 private var timer:Timer; // 记录上一次计时的时间 private var prev:int; public function TimerTest() { // 计时器初始化为20毫秒执行一次,执行5次后结束 timer = new Timer(20, 5); timer.addEventListener(TimerEvent.TIMER, onTimer); timer.start(); // 启动计时器后,记录一下当前时间 prev = getTimer(); } private function onTimer(event:TimerEvent):void { // 计时器执行,获取当前时间 var t:int = getTimer(); // 打印出当前时间与上一次计时的时间间隔 trace(t - prev); // 记录下当前时间 prev = t; } } } /** 输出结果 26 28 38 27 20 **/

运行一下这个程序,可以看到输出的结果并不是准确的20毫秒,每次运行的结果都不一样,并且都大于等于20毫秒,由此可以得出Timer的计时并不是精确的。

继续看每次Flash帧频的时间间隔,这个测试例子中,设置了帧频为25帧每秒,理论上两帧之间的时间间隔为40毫秒(1000毫秒 / 25帧):

package { import flash.display.Sprite; import flash.events.Event; import flash.utils.getTimer; // 设置swf的帧频的25帧每秒 [SWF(frameRate = 25)] public class EnterFrameTest extends Sprite { // 记录上一次计时的时间 private var prev:int; public function EnterFrameTest() { // 监听ENTER_FRAME事件 this.addEventListener(Event.ENTER_FRAME, onEnterFrame); // 记录当前时间 prev = getTimer(); } private function onEnterFrame(event:Event):void { // 每次ENTER_FRAME事件,获取当前时间 var t:int = getTimer(); // 打印出当前时间与上一次计时的时间间隔 trace(t - prev); // 记录当前时间 prev = t; } } } /** 测试结果 47 32 44 47 32 47 29 **/

可以看出各帧之间的时间间隔也是不确定的,不过这些时间间隔的平均值还是很接近于40的。

上面的测试结果只是针对于较正常的情况下,并不能说明Timer计时和帧频的所有问题,那么我们继续走下去。如果我们设置Timer的时间间隔大一些、帧频低一些,那么计时的相对误差就会小一些;这个不是我们关心的问题,现在的问题是如果把Timer的时间间隔设的很小、帧频很高,就会出现较大的误差,我们来看一下结果:

/** 测试结果 Timer的计时时间为1毫秒 10 20 9 14 15 **/ /** 测试结果 帧频为200帧每秒 20 11 15 15 14 18 14 **/

对比开始的测试,对于Timer的误差,或许我们可以理解,但这里帧频平均值(15.5)跟理论间隔(5)差别就比较大。如果您把大量的输出结果平均一下,或许会发现帧频的平均值与Timer时间间隔的平均值会比较接近(具体平均值每台计算机的测试结果都会有一定的差别)。

对于为何会存在这些差异,就需要引入Flash Player的一些内部机制了,在不了解Flash Player的可变跑道之前,我只知道Flash Player的计时不精确,但并不了解原因,直到看了下面这篇文章:

执行模型之可变跑道

对于Flash Player的内部机制,一直希望能有一些资料可以学习一下,一直没有找到比较丰富的资源,如果您手上有这方面的资料,希望能分享一下哈,本人不胜感激,也希望能和您交流一下Flash方面的技术。

Flash Player帧频、Timer计时 的时间间隔相关推荐

  1. 借助 Adobe Scout 理解 Flash Player

    原文链接 Adobe Scout 用于优化 Flash 内容,是一款极为强大的工具,因为它能让您看到 Flash Player 幕后正在发生的事情.但是若明白 Flash Player 为什么做这些事 ...

  2. Understanding Flash Player with Adobe Scout

    Adobe Scout 是一款强大的Flash内存分析工具,可以观察到Flash Player后台正在运行的内容.从Adobe Scout上表现的内容,就可以知道Flash Player正在做什么.为 ...

  3. Flash Player渲染模型(显示列表)

    显示列表是Flash Player 9以后才有的Flash渲染模型,这是一个非常重要的模型.那么为什么要彻底改变Flash对图形的操作方式呢?原因有两个:速度和简化.以前显示列表各个方面都是Movie ...

  4. 使用Cumulus和Flash Player搭建视频会议示例

    该篇文档取材于Cumulus官网上的视频会议代码,详见 https://github.com/OpenRTMFP/Cumulus/wiki/Server-Application,-Samples 我根 ...

  5. Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法

    Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 ...

  6. Flash Player漏洞利用Exploiting Flash Reliably

    以下消息来自幻影论坛[Ph4nt0m]邮件组   前两天推荐过Mark Dowd的Paper "Exploiting Flash Reliably" [url]http://hi. ...

  7. 在 Ubuntu 14.04 Chrome中安装Flash Player(转)

    在 Ubuntu 14.04 中安装 Pepper Flash Player For Chromium 一个 Pepper Flash Player For Chromium 的安装器已经被 Ubun ...

  8. Ubuntu 64位系统安装flash player

    ubuntu 64下 flash player 安装方法  1 下载 http://labs.adobe.com/downloads/flashplayer10_square.html wget ht ...

  9. Ubuntu 17.4下如何安装和配置flash player

    Ubuntu Linux系统下没有自带的flash player,要自己手动安装.下面post出简单的安装过程. 首先打开终端,输入命令:sudo apt-get install flashplugi ...

最新文章

  1. IDEA多行缩进快捷键
  2. c# load xml 中文报错
  3. Tensorflow_yolov3 Intel Realsense D435奇怪的现象,多摄像头连接时一旦能检测到深度马上就会卡(卡住)
  4. 【51Nod - 1268】和为K的组合 (背包 或 dfs)
  5. boost 获取日期时间
  6. 软考:项目中的常见问题
  7. 1. golang 接入Discord做消息推送
  8. webpack4+vue打包简单入门 1
  9. 一款Java开源的Springboot即时通讯 IM,附源码
  10. esp分区引导修复失败_让你彻底理解和学会UEFI启动模式下修复引导问题的教程-网络教程与技术 -亦是美网络...
  11. 华为路由与交换 eSight 基本功能学习笔记
  12. 【PCL自学:Feature7】基于转动惯量和偏心量的描述符 (持续更新)
  13. android 4.2 dropbox,android 下用脚本备份文档到dropbox的实现
  14. 刷脸支付星星之火可以燎原
  15. AWS -DMS -实例内存降低
  16. WIN10家庭版增加本地安全策略
  17. 中泰XTP极速交易系统缔造者:为量化而生
  18. 快速新建多个文件夹,而且是指定名称的!
  19. 2021阿里云服务器购买攻略-618年中大促专场
  20. 入门到放弃之 NVMe-MI --- 协议简介

热门文章

  1. 灰色关联分析模型(C++代码)
  2. 网络营销实战课-好用的工具推荐
  3. 【设计方法论】OOP设计原则
  4. 一万字详解C语言中长度为零的数组
  5. matlab fidp,MATLAB潮流计算仿真
  6. linux背光系统--背光延时点亮
  7. 0160 十分钟看懂时序数据库(I)-存储
  8. 关于第一期SWTC社区开发者大赛赛果的公告
  9. 国内首届中文人机对话技术评测赛果出炉,两项任务冠军团队都分享了哪些技术细节?...
  10. OSChina 万圣节乱弹 ——重口味请谨慎点开