- 浏览: 1088529 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
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方面的技术。
对于大部分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方面的技术。
发表评论
-
HttpStatusConfig --一个HTTP 协议返回的 解析说明类
2012-04-18 16:40 0package guwanyuan.qicool.game ... -
HTTP/1.1协议规范(中文归纳版)
2012-04-18 16:39 2136一、介绍(introduction) ... -
[转] [Flash/Flex] 加载SWF性能VS影片剪辑性能
2012-03-15 22:29 0http://bbs.9ria.com/viewthread. ... -
关于富士通windows 7家庭普通板升级为windows 7旗舰版
2012-03-05 14:51 2028windows7普通家庭版不能一下升级到windows7旗舰版 ... -
水果忍者鼠标跟随特效制作[转载]
2012-03-01 16:06 2457实现这效果其实比较简单,主要是思路~! package ... -
请问如何才能让加载到一半的SWF不自动播放
2012-02-29 03:06 1547我用loader加载l=new Loader(); ... -
禁止输入文本可以粘贴
2012-02-10 13:15 2323//禁止输入文本粘贴动作 private static ... -
江湖情缘游戏里的跳的类
2012-02-08 23:55 0package com.app.role.montions ... -
[教程] 路点导航(Waypoint Navigation)
2011-12-31 00:51 0前言:这个不难,所以知道的童鞋不要喷,不知道的童鞋也不要怕,要 ... -
ARPG游戏引擎设计思路
2011-12-31 00:48 00.整体结构 下载 (32.92 KB ... -
Embed绑定XML与txt文本文件
2011-12-28 15:54 4660使用Embed标签可以将图片绑定到swf中并显示,那么我 ... -
Flash_Rich_Text_Editor(完美的富文本编辑器)
2011-12-27 17:55 0Flash_Rich_Text_Editor(完美的富文 ... -
弹弹堂测试
2011-12-08 04:21 0弹弹堂测试弹弹堂测试 -
一些DEMO
2011-11-28 17:42 0一些DEMO一些DEMO -
Matrix学习
2011-11-28 16:51 0Matrix学习 -
[转]三次贝尔曲线
2011-11-10 01:09 1932http://bbs.9ria.com/viewt ... -
[心得] 完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题
2011-11-03 00:46 2944先看下面的一段脚本,这是比较经典的初始化脚本: pa ... -
五子棋算法详解
2011-10-31 04:14 0五子棋算法详解五子棋算法详解五子棋算法详解 -
[转]服务器端ActionScript语言参考
2011-10-31 00:29 0服务器端ActionScript语言参考 -
[转]FLASH与JS序列简单应用
2011-10-28 01:03 2096FLASH与JS序列简单应用 (一) 用swfob ...
相关推荐
在AS3中,我们可以使用`flash.utils.getTimer()`函数来获取系统时间,然后在每帧开始和结束时记录时间差,从而计算出帧率。此外,` ENTER_FRAME `事件也可以用来监听每一帧的开始,以此来进行连续的帧频计算。 ...
例如,增加曝光时间可能会降低帧频,而提高数据传输速率则可能提高帧频。计算器正是通过模拟这些寄存器的变化,计算出不同设置下的帧频。 在VC++6.0环境下开发这款工具,开发者利用了MFC(Microsoft Foundation ...
一旦满足阻止 Flash Player 调用已定义函数的条件,将 onEnterFrame 事件处理函数的值设置为 null。 可用性:ActionScript 1.0、Flash Player 6 示例 下面的示例为 onEnterFrame 事件处理函数定义一个函数,该函数...
4. **不同Flash Player版本的测试**:考虑到用户可能使用不同版本的Flash Player,因此需要测试程序在不同版本下的兼容性。 ##### 3.2 性能测试 对于Flash应用程序的性能测试,通常可以分为前台和后台两部分进行。...
- 在互联网上播放的Flash动画,合适的帧频率是30帧/秒,这是Flash的默认帧频。 3. **创作素材**: - 制作Flash动画时可能需要收集的素材包括音效、背景音乐、图片、视频剪辑等。 4. **Flash 输出能力**: - ...
标题中的“SWF转GIF,Flash转换为GIF文件的方法”是指将基于Flash的SWF格式文件转换为常见的GIF动画格式的过程。这通常是因为SWF文件虽然适合在网络上传播,但其体积较大,不适合在某些平台如论坛上作为动态签名使用...
这可以通过在每次渲染时增加计数器并在一定时间间隔(如1秒)后重置计数器来实现。还可以用这个信息来控制渲染速度,例如限制帧率,避免资源浪费。 在不使用DirectX和OpenGL的情况下,可以使用CPU进行图形渲染,但...
1. 新建Flash文档:打开Flash软件,选择“新建”项目,设置合适的舞台大小和帧频。 2. 创建图层:在时间轴上添加多个图层,每层代表一个数字。 3. 绘制数字:在每个图层的第一帧绘制对应的数字,例如10层分别绘制0到...
Flash 动画基本都会包含视频、声音、图形等丰富的媒体元素,当被发布为扩展名为 .swf 的 flash 影片后,该类型文件占用硬盘空间非常少,并且可以通过 Flash Player 播放器(版本不低于 FLASH 程序自带播放器的版本...
高帧频图像跟踪系统设计 1. 引言 在高速运动的场景下,如导弹末端制导、弹道实验和机载武器姿态跟踪,要求系统能够快速捕获目标并进行实时定位。这需要一种可以完整记录高速实验数据的高帧频图像跟踪系统,以便为...
3. **计算帧频**:在捕获一定数量的帧后,我们可以根据所用时间计算帧频。帧频等于总的帧数除以总时间(单位转换为秒)。 ```cpp int num_frames = 100; // 检测的帧数 double total_time = 0.0; for (int i = 0; i...
- **新的绘图API**:Flash Player 10引入了一系列新的绘图API,如`drawPath()`、`drawGraphicsData()`和`drawTriangles()`等,这些API虽然不会直接提高显示性能,但能显著减少代码量,从而提高执行效率。...
1. 创建新项目:打开Flash软件,创建一个新的Flash文档,设置合适的舞台尺寸和帧频。 2. 绘制角色:使用Flash的矢量绘图工具,绘制出“两只老虎”的基本形状。利用笔刷工具、椭圆工具、矩形工具等,结合选择工具和...
- 熟悉Flash工作环境:学习Flash的界面布局,掌握工具箱、时间轴、库面板等关键元素的使用。 - 创建新文档:了解不同类型的文档设置,如帧频、舞台大小、颜色模式等。 - 对象绘制:掌握矢量图形的绘制,包括线条...
2. **频率分析**:通过对连续帧的时间间隔进行统计分析,计算帧频的平均值和标准差,以此判断是否存在漂移。 3. **阈值设定**:设定一个帧频漂移的容忍范围,当帧间隔超出此范围时,系统将识别为帧频漂移。 4. **...
**运行环境**: ActionScript3, FlashPlayer9及以上版本 **开发环境**: Flex(Flash)Builder, FlashDevelop及其他ActionScript开发环境。 #### 三、Pushbutton Engine Pushbutton Engine是一款功能强大的游戏框架...
时间轴上分布着图层、帧和播放头,图层用于组织不同元素,帧定义了动画的每一帧画面,帧频则决定了动画播放速度,通常12-24帧/秒可达到良好的视觉效果。 2. 文件格式:Flash有两种主要的文件格式,即源文件格式fla...
Flash8.0的界面分为多个面板,如时间轴、舞台、工具箱和属性面板等。时间轴是管理动画帧的关键,舞台则是你设计和绘制内容的地方。工具箱提供了各种绘图和编辑工具,如铅笔、刷子、选择工具等,而属性面板则允许你...
7. **发布和测试**:完成编码后,使用Flash的发布功能将项目导出为SWF格式,然后在浏览器或Flash Player中测试效果,进行调试和优化。 8. **优化与兼容性**:考虑到不同浏览器和平台的支持程度,可能需要对源码进行...
这个问题在Adobe的官方补丁修复后得到了解决,通过升级FLASH PLAYER到8.0.24.0,用户可以避免这种帧频同步的错误,从而保证动画的流畅性。 另一个修复是关于声音流在影片第一帧不播放的问题。原版中,由于在第一帧...