Форум: "Игры";
Текущий архив: 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