Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   fps limit (http://www.flasher.ru/forum/showthread.php?t=194102)

ASDAlien 07.02.2013 22:36

fps limit
 
привет, в общем во флэшке стоит 30 фпс, а класс который отображает фпс и использование памяти иногда показывает 31-32, скажите это класс глючит или флэш не совсем точно ограничивает, и есть ли какой-нибудь способ сделать не выше 30 ?

caseyryan 08.02.2013 07:14

Цитата:

и есть ли какой-нибудь способ сделать не выше 30 ?
поставить 28, например )
Цитата:

а класс который отображает фпс и использование памяти иногда показывает 31-32
Речь о Stats? Советую посмотреть его исходник, чтобы понять как он расчитывает fps. Там расчеты на основе таймера, и всему виной длинные числа. Погрешность в 1 - 2 кадра вполне нормальна.

Вот stage.frameRate покажет 30.

ASDAlien 08.02.2013 12:53

да, речь о статс, а сделать 28 не вариант) мне нужно чтобы действие флэшки происходило с одинаковой скоростью на всех браузерах, а оно почему-то визуально намного быстрее в хроме идет, не знаю вот как убрать это)

Tails 08.02.2013 13:00

ASDAlien,
Делайте игру и расчёты на основе таймера.

ASDAlien 08.02.2013 13:29

изначально на таймере и делал, пробовал и так и так, но с фпс почему-то лучше работает

Tails 08.02.2013 14:20

Расчёт игры может идти на основе кадров, или на основе таймера. В последнем случае, скорость течения игры не будет привязана к fps.

caseyryan 08.02.2013 14:30

Цитата:

В последнем случае, скорость течения игры не будет привязана к fps.
Будет. Все это фигня. Это так же будет тормозить вместе с плеером.
Есть фишка в проверке через getTimer() сколько времени прошло с момента последней перерисовке, и на основе формул расчитывать где должен быть конкретный объект в это время. Но от тормозов это совсем не избавит. Даже если объекты будут появляться в нужных местах, вся анимация будет дерганой.

Цитата:

изначально на таймере и делал, пробовал и так и так, но с фпс почему-то лучше работает
Если это было по TimerEvent.TIMER, то в обработчике нужно было вызывать e.updateAfterEvent() для принудительной перерисовки экрана.

KumoKairo 08.02.2013 16:14

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

Hauts 08.02.2013 16:47

event:EnterFrameEvent ?
Сорри, про старлинг не сразу понял.

Анонимные функции — зло.

KumoKairo 08.02.2013 16:52

Hauts, насчет анонимных функций спорить не стану, это же просто пример реализации.
Не стоит каждую строчку кода воспринимать в лоб ;)


Часовой пояс GMT +4, время: 05:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.