Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Счётчик fps.   Найти похожие ветки 

 
Zak3D[@Tm] ©   (2004-01-14 11:09) [0]

Ермак, когда-то ты мне таким способом посоветовал делать счётчик fps, возник вопрос
-куда этот обработчик вставлять?
///////////////
uses Windows;

а дальше GetTickCount - возвращает число милисекунд, прошедших с начала запуска системы.

То есть:

Var time: cardinal;
  fps: real;
...///что за прочедура???
begin
...
time := GetTickCount;
...Здесь мы рисуем очередной кадр...
time := GetTickCount - time; //А здесь посчитали, сколько милисекунд ушло на кадр.
fps := 1000 / time; //Поскольку в секунде тысяча милисекунд...
...Выводим куда-нить ФПС...
////////////////////////////
это наверно тупой вопрос, но помогите если не лень.


 
Darthman ©   (2004-01-14 13:23) [1]

наверное, перед и после вывода кадра.... а все это вместе либо в обработчике таймера, либо в onidle


 
Zak3D[@Tm] ©   (2004-01-14 14:47) [2]

Разъясни, пожалуйста, что такое onidle.


 
Darthman ©   (2004-01-14 15:28) [3]

обработчик события idle. Есть еще onPaint, в него можно поместить... да много куда, собственно.


 
Zak3D[@Tm] ©   (2004-01-14 15:50) [4]

вставыил в onPaint выдает на ноль делить нельзя, что делать, как правильно перевести из real в string?


 
Darthman ©   (2004-01-14 16:41) [5]

floattostr();
Если нельзя делить на ноль, не дели.


 
Zak3D[@Tm] ©   (2004-01-14 19:59) [6]

Блин, ну никак не получается, ко-небудь может всё дословно написать, даже не знаю, что не так делаю, как только не пробовал. :(


 
B4rr4cuda   (2004-01-15 01:25) [7]

Первую часть (time := GetTickCount;)
пишешь перед обработкой очередного кадра, а потом
проводим вычисления количества милисикунд ушедших на обработк
(time := GetTickCount - time;).
Для информации: GetTickCount - возвращает кол-во миллисекунд
прошедших с момента запуска компьютера.


 
NailMan ©   (2004-01-15 12:24) [8]

А я не парюсь и считаю фактическое число ФПС:

var Frames, minfps, maxfps:Integer;
         avrgfps:Single


Создается обработчик таймера, который будет нам обрабатывать счетчик фпс.

Procedure TimerFPSHandler;
begin
FPSString:=inttostr(frames);        //Создаем строчку для рисования на экране
if frames<minfps then minfps:=frames;  //определяем минимальный фпс
if frames> maxfps then maxfps:=frames; //определяем максимальный фпс
avrgfps:=(avrgfps + frames);  //считаем сумму для среднего
inc(secs); //прибавляем секунды прошедшие с начала отсета времени
frames:=0; //зануляем счетчик
end;


Далее при создании сцены или приложения(но тогда надо обнулить перед созданием сцены avrgfps,frames,maxfps,minfps(=maxint)) мы создаем виндовый таймер(при выходе убиваем).

Procedure  SetTimers(onn:boolean);
begin
if onn then
 begin
   SetTimer(Handle,1,1000,@TimerFPSHandler);
 end else
 begin
  KillTimer(Handle,1);
 end;
end;


В методе сцены Render, в самом конце мы делаем Inc(Frames);

На выходе из приложния делаем avrgfps:=avrgfps / Secs; и получаем средний фпс за все время работы приложения.

Таким образом считаются фактическое число кадров которое было на прошедшей секунде. Надежно и просто.

вставыил в onPaint выдает на ноль делить нельзя, что делать, как правильно перевести из real в string?
Блин конечно будет выдавать ноль. Ты перед тем как делать такой счетчик почитал бы в RTFM про GetTickCount. Этот счетчик имеет минимальное разрешение времени равное ~20 мс. Тоесть меньшее время ты ни как им не отловишь.



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1084118003
Aaa
2004-05-09 19:53
2004.05.23
Реализация TImage а заданной формы?


3-1083159389
pashaz
2004-04-28 17:36
2004.05.23
multiselect в Grid e


1-1084115984
KLAUS
2004-05-09 19:19
2004.05.23
НУжно просто навсего удалить файл


9-1074531726
Sos
2004-01-19 20:02
2004.05.23
Во время движения персонаж мигает как фонарь =)


7-1081378840
nec
2004-04-08 03:00
2004.05.23
Чтение и запись в COM-порт в Win XP/NT