Главная страница
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.027 c
8-1077811729
miek
2004-02-26 19:08
2004.05.23
GDIsurface


4-1081670653
Evgeniy_K
2004-04-11 12:04
2004.05.23
альтернатива MessageDlg


14-1083307248
MBo
2004-04-30 10:40
2004.05.23
Пятница... Опять задачки ;)


14-1083382986
Alexander666
2004-05-01 07:43
2004.05.23
Concrete Mathematics


1-1083744538
dimon1979
2004-05-05 12:08
2004.05.23
Цветовая палитра