![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать точный таймер?
Иггорь © (2005-07-24 00:28:00)В PowerDraw юзается QueryPerformanceCounter, но на некоторых машинах это не работает, и при больших FPS игра летает! Скажите, какие еще есть способы!
XProger (2005-07-25 11:56:00) [1]http://xproger.mirg.ru/files/XSource_src.zip
XSource.dpr, читай и радуйся! :D
NailMan (2005-07-25 10:01:00) [2]http://nailman.cyborghome.ru/ut_article2_4.htm
---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13
Ландграф Павел (2005-07-24 14:23:00) [3]а про неработу QueryPerformanceCounter фигня какая-то... непредставляю что это за машина такая где это не будет работать... =)
Ландграф Павел (2005-07-24 14:21:00) [4]Есто ты утверждаешь что стандартный таймер в PowerDraw для этого не подходит!? ты в курсе что там один для рендера, другой для обработки прочей лабуды, и если fps в рендере будут 60, то они будут 60 на любой машине... абсолютно на любой, меньше будут, а больше нет!
ViK (2005-07-24 08:34:00) [5]function GetTime(): double;
var
freq, start: LARGE_INTEGER;
error: boolean;
begin
error:=not QueryPerformanceFrequency(@freq);
if (error) then
begin
result:=GetTickCount()/1000;
end
else
begin
QueryPerformanceCounter(@start);
result:=start.QuadPart/freq.QuadPart;
end;
end;
Функция должна возвращать количество секунд прошедшее с момента запуска винды. Далее делаешь вечный цикл
while (true) do begin
t2:=t1;
t1:=GetTime();
//Прорисовка
end;
А передвижение устраеваешь так:
Unit.Move(Step*(t2-t1));
где (t2-t1) и есть тот коэфициент о котором говорил MeF Dei Corvi.
П7 (2005-07-24 01:25:00) [6]Что есть таймер, по вашему? (:
П7 (2005-07-24 01:25:00) [7]А, и ещё...
Что есть точность, по вашему? (:
MeF Dei Corvi (2005-07-24 01:14:00) [8]1) Комп, на котором такая функция не работает надо ещё поискать. Я, например, такой рока не видел.
2) Логично, что при больших FPS игра будет летать.
3) Для того, чтобы на всех компах игра шла одинаково, следует в зависимости от значений этой ф-ии получить некий коэффициент - и все значения, ответственные за движение/вращение и пр... умножать на этот коэффициент.
4) Вопрос сформулирован некорректно. Заголовок тоже.