Тема: fps limit
Показать сообщение отдельно
Старый 08.02.2013, 16:14
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 8  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Расчет ФПС происходит примерно раз в секунду.
Каждый новый кадр переменная, считающая количество кадров, инкрементируется. После того, как остаток от деления значения этой переменной на 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 заданного значения


Последний раз редактировалось KumoKairo; 08.02.2013 в 17:50.