怎样编写一个帧速率检测器。

如题所述

每次进入到一帧的时候都会激发exitframe事件。这样我们就可以通过这个事件来获取到具体的帧速率了。计算原理很简单。就是看一秒钟exitframe运行了多少次。用exitframe运行的次数除以时间,就是帧速率了(FPS即帧每秒)。
在director里面建一个文本演员。然后将下面的行为赋给他,就行了。
property curtime,pcount,pfrate,ptime
on beginsprite me
curtime=_system.millisecondspcount=0endon exitframe me
ptime=(_system.milliseconds-curtime)/1000+1
pfrate=integer(pcount)/ptime
pcount=pcount+1
sprite(me.spritenum).member.text=string(pfrate)end这样。我们就简单的做好了一个帧速率监测器。
但是如果电影运行的很长。我们这个帧检测器得到的只是一个平均的帧播放速率。我们有时间需要一个更加准确的速率,这样我们需要将起始的时间重新设置,这样我们又需要一个重新设置的按钮。然后再写一个行为用来将pcount设置为0,以及将curtime设置为当前时间。当然你也可以干脆这样。在上面的行为里加这么一段:
on mouseup me
beginsprite()end这样。你就可以通过点击帧速率监测器来重新计算帧速率了。
答案当然是可以的。但是如果在director里面做的话。精美是精美很多了。可是或许需要五六个member才能完成这件事情,这样就使用起来就很不方便了。可以不可以一个member来搞定一个精美的监测器呢?这样就可以封装所有内容,从而可以更加方便的使用.
答案依然是:Yes,这个时间我们就需要使用到另外一个工具:flash,他一个很大的优点就是时间轴是可以自包含的。即同一个时间可以有很多个时间轴(director在某种情况下也可以有一些简单的,如filmloop),如果我们在flash里面写一个监测器,然后放到director来检测,是不是也可以呢?于是我便开始做了。用flash写一个(因为这里主要讲director的,所以具体程序不再描叙,思路和前面的一样。换flash语法而已。)。导入到director里面,运行。失败了。因为是在flash里面写的。监测的当然是flash的播放速率。实际上,在flash帧速率设置为12,在director就显示12,设置30,他就显示30.
因为director一向以速度见长。我设置director跑到999,flash还能够lock-step director的脚步吗?说试就试.于是乎我将帧速率设置到999,Run,果然,小弟flash跟不上老大director的脚步了.拼了老命也就700多帧(我机器P4 3.0G.512M内存,64显存,唉,看来没有办法了.可是对于我这样追求完美的人来说,这个是不能接受的.
于是乎我就想,那我可以不可以通过diretor来向flash发消息的方式来做呢?这样就是真正的监测到director的帧速率了.
可是这样的话.就需要在director里面写程序这样,又不能够以一个member来搞定一切了.真的是烦啊.
不过引用一个伟人的话:只要是人.就一定会有办法.在我正郁闷的时候,Idea就来了.director里面不是还有一个老掉牙的member script吗?这个是可以附在member上面的.这样.director里面的程序就可以和flash两位一体了.看来老人家还是有老人家的用途的.
(在这里我就不放原程序了,思路基本上和上面的一样,就是在
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜