![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Таймер
Дима © (2009-06-18 15:40:00)Как правильно сделать таймер на API?
Я делаю так
procedure glDraw();
///////////////////////////////////////////////////////////////////////
TGT0:=timeGetTime- startTime0;
delta0:= tgt0/10*1;
if delta0 >1 then begin
modeltimer[0]:=modeltimer[0]+1;
delta0:=0;
startTime0:=timeGetTime();
end;
end;
Но в таком таймере переменная modeltimer[0]
увеличивается очень медленно, а мне нужно
быстрее.
Сергей М. (2009-06-22 17:42:00) [1]На вопрос [16] соизволишь ответить ?
Дима (2009-06-19 22:34:00) [2]А функцию SetTimer(h_Wnd, 1, 1000, nil) как использовать?
Например, я нажимаю кнопку 'вверх' включается таймер
и нужно отсчитать 1(2,3,4) секунды.
Сергей М. (2009-06-19 08:42:00) [3]А где и как вызывается glDraw() ?
Дима (2009-06-19 00:31:00) [4]init
startTime0:=timeGetTime();
delta0:=0;
modeltimer[0]:=0;
...........................
procedure glDraw();
TGT0:=timeGetTime- startTime0;
delta0:= tgt0/10*1;
if delta0 >1 then begin
modeltimer[0]:=modeltimer[0]+1;
delta0:=0;
startTime0:=timeGetTime();
end;
end;
весь код. переменная modeltimer[0] увеличивается
через одинаковые промежутки времени со скоростью tgt0/10*1
Б (2009-06-18 23:15:00) [5]Вылаживай код.
А то этот "кусок" ни о чём не говорит.
Дима (2009-06-18 22:46:00) [6]Я раньше думал, что ето таймер.
Теперь сам не знаю , что ето.
Б (2009-06-18 22:32:00) [7]Вообще из твоего кода ничего не понятно. "Што... Пашто..."
Код в студию.
Дима (2009-06-18 22:09:00) [8]Про задержку?
Зачем мне задерживать программу? у меня
простая игра на opengl.
Сергей М. (2009-06-18 20:52:00) [9]Никаким "тиканьем" в твоей процедуре даже не пахнет, хоть миллион к modeltimer[0] прибавь.
На вопрос в [7] соизволишь ответить ?
Дима (2009-06-18 19:46:00) [10]Я уменшал delta и tgt но скорость тиканья не сильно уменьшается.
Похоже, что изменить скорость монжно, только
поменяв modeltimer[0]:=modeltimer[0]+1; на
modeltimer[0]:=modeltimer[0]+5;
Б (2009-06-18 17:36:00) [11]> delta0:= tgt0/10*1;
Зачем домножаешь на единицу?
Хочешь быстрее - бери знаменатель помешьше... ;)
Сергей М. (2009-06-18 17:27:00) [12]Тебе процедуру типа delay что ли нужно следать, которая задерживала выполнениа программы на 1/24 секунды ?
Дима (2009-06-18 17:05:00) [13]Да.
Сергей М. (2009-06-18 16:53:00) [14]Так я ж тебя и спрашиваю - какой конкретнопериод требуется обеспечить ?
От этого и решение зависит)..
Для классической киношной анимации, если о ней идет речь, достаточно 24 кадра в секунду, т.е. период = 1/24 сек
Тебя устраивает такая цифирь ?
Дима (2009-06-18 16:26:00) [15]Тогда на другом компе, у которого процессор
лучше сложение будет очень быстрым и модель
будет вращаться как сумашедшая.
Сергей М. (2009-06-18 16:14:00) [16]
> мне неважно какой период
Очуметь)
Т.е., тебе, к примеру, фиолетово с какой скоростью крутится секундная стрелка твоих часов, отсчитывая "секунды" ?
Главное чтобы крутилась и желательно побыстрей ?)
Тогда с какого боку тут объявились функции мультимедиа-таймера ?
> Нужно только чтоб переменная modeltimer[0]
> увеличивалась или уменьшалась на 1
> быстрее.
Тогда убери всю эту лабуду, оставь только одну строчку
modeltimer[0]:=modeltimer[0]+1;
Быстрее уж некуда)
Дима (2009-06-18 16:09:00) [17]Ну мне неважно какой период.
Нужно только чтоб переменная modeltimer[0]
увеличивалась или уменьшалась на 1
быстрее.
Сергей М. (2009-06-18 16:00:00) [18]Какой период "тиканья" требуется получить ?