Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Счётчик 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
14-1083567626
Белый волк
2004-05-03 11:00
2004.05.23
Правильное отображение кирилицы в консольном приложении Delphi


3-1083182282
Курдль
2004-04-28 23:58
2004.05.23
Удаление записей из одной таблицы по ключам другой таблицы


1-1083906868
siriusP
2004-05-07 09:14
2004.05.23
Как перехватить нажатие последовательности клавиш?


4-1080815064
WELLiON
2004-04-01 14:24
2004.05.23
Исчезающий значок из трея


4-1081256565
Kme
2004-04-06 17:02
2004.05.23
Безвозвратное удаление





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский