`

[转]Flash Player帧频、Timer计时 的时间间隔

阅读更多
http://blog.csdn.net/zlxluofeng/archive/2010/05/07/5568294.aspx


对于大部分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方面的技术。
分享到:
评论

相关推荐

    不谦虚得说是一款顶级的帧频检测应用

    在AS3中,我们可以使用`flash.utils.getTimer()`函数来获取系统时间,然后在每帧开始和结束时记录时间差,从而计算出帧率。此外,` ENTER_FRAME `事件也可以用来监听每一帧的开始,以此来进行连续的帧频计算。 ...

    MT9001帧频计算器——VC

    例如,增加曝光时间可能会降低帧频,而提高数据传输速率则可能提高帧频。计算器正是通过模拟这些寄存器的变化,计算出不同设置下的帧频。 在VC++6.0环境下开发这款工具,开发者利用了MFC(Microsoft Foundation ...

    回家后要测试的FLASH TEST文件

    一旦满足阻止 Flash Player 调用已定义函数的条件,将 onEnterFrame 事件处理函数的值设置为 null。 可用性:ActionScript 1.0、Flash Player 6 示例 下面的示例为 onEnterFrame 事件处理函数定义一个函数,该函数...

    falsh初探,简单介绍了flash测试方法

    4. **不同Flash Player版本的测试**:考虑到用户可能使用不同版本的Flash Player,因此需要测试程序在不同版本下的兼容性。 ##### 3.2 性能测试 对于Flash应用程序的性能测试,通常可以分为前台和后台两部分进行。...

    AdobeFlash认证考试题目及答案宣贯.pdf

    - 在互联网上播放的Flash动画,合适的帧频率是30帧/秒,这是Flash的默认帧频。 3. **创作素材**: - 制作Flash动画时可能需要收集的素材包括音效、背景音乐、图片、视频剪辑等。 4. **Flash 输出能力**: - ...

    SWF转GIF,Flash转换为GIF文件的方法.docx

    标题中的“SWF转GIF,Flash转换为GIF文件的方法”是指将基于Flash的SWF格式文件转换为常见的GIF动画格式的过程。这通常是因为SWF文件虽然适合在网络上传播,但其体积较大,不适合在某些平台如论坛上作为动态签名使用...

    不使用DirectX和OpenGL实现可转动的三维框架并可以计算帧频

    这可以通过在每次渲染时增加计数器并在一定时间间隔(如1秒)后重置计数器来实现。还可以用这个信息来控制渲染速度,例如限制帧率,避免资源浪费。 在不使用DirectX和OpenGL的情况下,可以使用CPU进行图形渲染,但...

    flash逐帧动画实例

    1. 新建Flash文档:打开Flash软件,选择“新建”项目,设置合适的舞台大小和帧频。 2. 创建图层:在时间轴上添加多个图层,每层代表一个数字。 3. 绘制数字:在每个图层的第一帧绘制对应的数字,例如10层分别绘制0到...

    Flash-CS6动画制作实例教程全套电子课件完整版ppt整本书电子教案最全教学教程整套课件.ppt

    Flash 动画基本都会包含视频、声音、图形等丰富的媒体元素,当被发布为扩展名为 .swf 的 flash 影片后,该类型文件占用硬盘空间非常少,并且可以通过 Flash Player 播放器(版本不低于 FLASH 程序自带播放器的版本...

    基于FPGA的高帧频图像跟踪系统设计.pdf

    高帧频图像跟踪系统设计 1. 引言 在高速运动的场景下,如导弹末端制导、弹道实验和机载武器姿态跟踪,要求系统能够快速捕获目标并进行实时定位。这需要一种可以完整记录高速实验数据的高帧频图像跟踪系统,以便为...

    OpenCV实现摄像头帧频检测(C++实现).zip

    3. **计算帧频**:在捕获一定数量的帧后,我们可以根据所用时间计算帧频。帧频等于总的帧数除以总时间(单位转换为秒)。 ```cpp int num_frames = 100; // 检测的帧数 double total_time = 0.0; for (int i = 0; i...

    Flash游戏优化技巧

    - **新的绘图API**:Flash Player 10引入了一系列新的绘图API,如`drawPath()`、`drawGraphicsData()`和`drawTriangles()`等,这些API虽然不会直接提高显示性能,但能显著减少代码量,从而提高执行效率。...

    flash动画2.0 两只老虎.zip

    1. 创建新项目:打开Flash软件,创建一个新的Flash文档,设置合适的舞台尺寸和帧频。 2. 绘制角色:使用Flash的矢量绘图工具,绘制出“两只老虎”的基本形状。利用笔刷工具、椭圆工具、矩形工具等,结合选择工具和...

    flash常用技术、技巧合集

    - 熟悉Flash工作环境:学习Flash的界面布局,掌握工具箱、时间轴、库面板等关键元素的使用。 - 创建新文档:了解不同类型的文档设置,如帧频、舞台大小、颜色模式等。 - 对象绘制:掌握矢量图形的绘制,包括线条...

    电子政务-光电经纬仪测量电视摄像帧频漂移的检测方法.zip

    2. **频率分析**:通过对连续帧的时间间隔进行统计分析,计算帧频的平均值和标准差,以此判断是否存在漂移。 3. **阈值设定**:设定一个帧频漂移的容忍范围,当帧间隔超出此范围时,系统将识别为帧频漂移。 4. **...

    Flash2D+3D游戏引擎

    **运行环境**: ActionScript3, FlashPlayer9及以上版本 **开发环境**: Flex(Flash)Builder, FlashDevelop及其他ActionScript开发环境。 #### 三、Pushbutton Engine Pushbutton Engine是一款功能强大的游戏框架...

    flash复习ppt课件.ppt

    时间轴上分布着图层、帧和播放头,图层用于组织不同元素,帧定义了动画的每一帧画面,帧频则决定了动画播放速度,通常12-24帧/秒可达到良好的视觉效果。 2. 文件格式:Flash有两种主要的文件格式,即源文件格式fla...

    Flash8.0入门教程下载

    Flash8.0的界面分为多个面板,如时间轴、舞台、工具箱和属性面板等。时间轴是管理动画帧的关键,舞台则是你设计和绘制内容的地方。工具箱提供了各种绘图和编辑工具,如铅笔、刷子、选择工具等,而属性面板则允许你...

    flash片头源码

    7. **发布和测试**:完成编码后,使用Flash的发布功能将项目导出为SWF格式,然后在浏览器或Flash Player中测试效果,进行调试和优化。 8. **优化与兼容性**:考虑到不同浏览器和平台的支持程度,可能需要对源码进行...

    FLASH8.0的BUG的重要修复和功能解析

    这个问题在Adobe的官方补丁修复后得到了解决,通过升级FLASH PLAYER到8.0.24.0,用户可以避免这种帧频同步的错误,从而保证动画的流畅性。 另一个修复是关于声音流在影片第一帧不播放的问题。原版中,由于在第一帧...

Global site tag (gtag.js) - Google Analytics