package
{
import flash.utils.*;
public class FreamCounterClass {
private static var freamSkipMax:uint = 6;
private static var freamLostMax:uint = 16;
//-------------------------------------------------------------------------------
private var freamRate
:Number = 60; private var freamTime
:Number = 16.667; private var freamCount:int = 1;
private var lastProcessTime:uint = 0;
private var vatulFream
:Number = 0; //-------------------------------------------------------------------------------
public function FreamCounterClass
( _freamRate
:Number = 60 ) { freamRate = _freamRate;
freamTime = 1000 / freamRate;
}
//-------------------------------------------------------------------------------
public function set virtualFreamRate
(_freamRate
:Number):void { freamRate = _freamRate;
freamTime = 1000 / freamRate;
}
public function get virtualFreamRate
():Number { return freamRate;
}
//-------------------------------------------------------------------------------
public function get virtualFreamCount ():uint {
return freamCount;
}
//-------------------------------------------------------------------------------
public function resetCount ():void {
lastProcessTime = 0;
return ;
}
//-------------------------------------------------------------------------------
public function nextFream():uint {
var timeStamp:uint = getTimer();
if(lastProcessTime != 0){
vatulFream += (timeStamp - lastProcessTime) / freamTime;
if (vatulFream > freamLostMax) vatulFream = freamLostMax;
freamCount = ((vatulFream + 0.25)|0);
if(freamCount >= freamSkipMax) freamCount = freamSkipMax;
vatulFream -= freamCount;
if(vatulFream <= -0.5) vatulFream = -0.5;
}
lastProcessTime = timeStamp;
return freamCount;
}
//-------------------------------------------------------------------------------
}
}
最終更新:2013年03月14日 22:16