Главная страница
    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.47 MB
Время: 0.037 c
6-1080642779
vinter
2004-03-30 14:32
2004.05.23
Как получить список доменов


1-1083916212
V-Isa
2004-05-07 11:50
2004.05.23
Проблеиа с сохранением JPEG


14-1083526687
Piter
2004-05-02 23:38
2004.05.23
Пропаганда пива


1-1083767695
BVV
2004-05-05 18:34
2004.05.23
алгоритм перебора ip адреса


14-1083305347
Igorek
2004-04-30 10:09
2004.05.23
Пятница: ObjectPascal - маздай, C++ - рулез





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский