Расчет ФПС происходит примерно раз в секунду.
Каждый новый кадр переменная, считающая количество кадров, инкрементируется. После того, как остаток от деления значения этой переменной на 60 будет давать 0, считаем пройденное с последнего "щелчка" время и делим прошедшее число кадров на это время.
То есть если у вас 30 фпс, то так и покажет. Иногда показывает чуть больше, это тоже бывает. Всему виной "икания" компьютера, когда новый кадр влетает в несовсем положенное ему время.
Счетчик кадров имеет примерно такой вид:
Код AS3:
var frameCount:int = 0;
var totalTime:Number = 0;
addEventListener(Event.ENTER_FRAME, function(event:EnterFrameEvent):void
{
totalTime += event.passedTime;
if (++frameCount % 60 == 0)
{
trace("fps: " + frameCount / totalTime);
frameCount = totalTime = 0;
}
});
Это пример реализации с помощью Starling, на чистом AS3 вместо event.passedTime обычно используют функцию вычисления пройденного с последнего кадра времени:
Код AS3:
function calculateElapsed():void
{
currentTime = getTimer();
elapsed = currentTime - previousTime;
previousTime = currentTime;
}
// все переменные инициализируются внутри класса и имеют тип Number
Если вы загружаете приложение вконтакт, то во всех браузерах, кроме Хрома, на "староватых" компах оно будет подтормаживать. Не забудьте поставить в настройках приложения wmode - direct
________________________
Ах да, и в чем вы кстати работаете? Flash Pro или Flash Builder / Flashdevelop?
Потому что Flash Pro довольно четко ставит FPS и рьяно пытается держать этот постоянный FPS заданного значения