Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Таймер


Дима ©   (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]

Какой период "тиканья" требуется получить ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо