![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ограничить FPS [Delphi, DelphiX, Windows]
2Wish © (2005-11-07 21:38:00)Здрасте, скажите какие есть способы ограничения FPS в DelphiX?
Sphinx (2005-11-09 09:34:00) [1]С DelphiX не работал...
Юзаю чистый DirectX и WinAPI и вполне доволен, поступаю следующим образом:
В основном цикле обрабатываю все сообщения и отрисовываю графику, а по событию таймера обновляю состояние клавишь через DirectInput.
Событие WM_TIMER не использую, потому как а) оно выстраивается в очередь сообщений и нужно обрабатывать в основном цикле, б) размерность этого таймера зависит от системы (9х - 55мс, NT - 10 мс).
Пользуюсь таймером из MMSystem. Во-первых у него есть процедура обратного вызова, для меня это удобней чем с обработкой сообщения WM_TIMER, а во-вторых у этого таймера размерность до 1 мс, если не меньше...
Если все выше сказанное соотнести с VCL получится, что обработка графики идет по OnIdle, а чтение состояния клавишь - по OnTimer (только таймер не стандартный TTimer и даже не TDXTimer).
> Асинхронность между нажатием игром на кнопку и процесом
> обновления DXInput.
По идее DirectInput обрабатывает ВСЕ нажатия, если только не произошло переполнение буфера.
О какой асинхронности идет речь ??
Запоздалая реакция на нажатие ??? Тогда нужно чаще обновлять состояние кнопок...
Пропускаются моменты нажатия/отпускания ? Увеличь размер буфера и уменьши интервал опроса...
2Wish (2005-11-08 18:31:00) [2]2 DR0N
Асинхронность между нажатием игром на кнопку и процесом обновления DXInput. Два таймера тоже не выход, из-за ActiveOnly, есть другие предложения?
DR0N (2005-11-07 22:42:00) [3]Сделай 2 таймера...
Хотя проблема не ясна у тебя процесс идет в отрисовке в том же таймере, о какой асинхронности может идти речь?
2Wish (2005-11-07 22:07:00) [4]Так я делал, но тогда неправильно будет работать DXInput, потому что DXInput1.Update; присходит во время таймера. :(
DR0N (2005-11-07 21:51:00) [5]А что поменять интервал DelphiX ого таймера уже не помогает?
TimerInterval=1000/FPS... где FPS - нужная нам скорость.