![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ограничение FPS [VC, Windows]
VolanD666 © (2006-01-27 08:10:00)Раньше, когда я создавал новый проект, то моя функция Render содержала ~ такой код:
NowTime=GetTickCount();
if ( ( NowTime-LastTime ) > 1000/OptimalFPS ) {
TempFPS=1000/( NowTime-LastTime );
LastTime=NowTime;
Render();
}
Но недавно я посмотрел несколько примеров, где этих строк просто нет!
Там просто высчитывается "коэффициент перемещения" и все, дальше идет Render(). Так нужны ли эти строки?
VolanD666 (2006-01-31 19:20:00) [1]А коэффициентдействительно действует :-)
Gnobobel (2006-01-27 22:50:00) [2]Ладно, пойду припишу к своей гаме такое...
XProger (2006-01-27 19:01:00) [3]Gnobobel, так
Gnobobel (2006-01-27 18:43:00) [4]Насколько я понял коэфицент перемещения это числоо, которое умножается на скорость, чтобы внезависимости от тормозов игры объекты двигались на V пикселей в определённый промежуток времени. Это так?
Зм1й (2006-01-27 15:51:00) [5]
> Кефир87 ©
Спасибо
Кефир87 (2006-01-27 15:32:00) [6]
>
> А это как? :)
вертикальная синхронизация, это когда back-буфер меняется местами с front-буфером с той-же частотой, что и частота вертикальной развертки монитора (в общем). Отключить (чтоб буферы менялись местами как только потребуется) можно руками, в настройках драйвера, можно программно. На ОГЛ расширение WGL_EXT_swap_control (wglSwapIntervalEXT(0)).
> Это получается, цикл надо делать не в WinProc, а после GetMessage?
>
> (Извиняюсь за невежество)
>
В WndProc вапще бесконечных циклов быть не должно! Там только обработка сообщений. Это в цикле вынимаются сообщения из очереди и посылаются на обработку в WndProc. Если же сообщения нет, то рисуем:
procedure wndLoop;
var
msg : TMsg;
begin
while is_loop do
begin
if PeekMessage(msg, 0, 0, 0, PM_NOREMOVE) then
begin
if GetMessage(msg, 0, 0, 0) then
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end else
begin
oglRender;
end;
end;
end;
А в рендере очищаем бэкбуфер, рисуем в него и меняем местами с фронтбуфером. Все.
Зм1й (2006-01-27 15:22:00) [7]
> Во первых отключить к чертям верт. синхронизацию.
А это как? :)
> Во вторых (я так делаю) в бесконечном цыкле
Это получается, цикл надо делать не в WinProc, а после GetMessage?
(Извиняюсь за невежество)
Nic (2006-01-27 15:17:00) [8]Читал когда-то в какой-то стать е, когда Дум 3 ещё не вышла.
Nic (2006-01-27 15:15:00) [9]
> XProger © (27.01.06 12:36) [12]
Читал когда-то в какой-то статья, когда Дум 3 ещё не вышла.
> DeadMeat © (27.01.06 12:12) [11]
Спасибо, сейчас изучим :)
Кефир87 (2006-01-27 14:44:00) [10]Во первых отключить к чертям верт. синхронизацию.
Во вторых (я так делаю) в бесконечном цыкле, либо принимаем сообщение (если таковое есть) либо рисуем. Вот. Никаких ограничений для фпс.
Зм1й (2006-01-27 14:35:00) [11]А как тогда перирисовывать окно, если не ограничивать fps? Я вот таймером ограничиваю, и в wm_timer вызываю InvalidateRect, а как другим способом?
XProger (2006-01-27 12:36:00) [12]Nic, нет там никаких привязок, что за глупости вообще... зачем оно? :)
DeadMeat (2006-01-27 12:12:00) [13]http://www.nvworld.ru/docs/30fps.html
Cash (2006-01-27 11:43:00) [14]Да действительно, на скорости выше 100 квс (fps) гораздо лучше
воспринимается хыть программный курсор, который рисуется со всякими
примочками.
Nic (2006-01-27 11:41:00) [15]
> XProger © (27.01.06 11:37) [8]
> Nic, я тебе искренне сочувствую. Сам я способен заметить
> кадр длительностью 10 мс в секунду :) Т.е. при 100 фпс всё
> чётко и ясно видно...
> А зачем разгружать процессор? Способен в 2 игры одновременно
> играть? ;)
>
> P.S.
> 25 - кадр - мифы современности ;)
Не обязательно ограничивать на 30 ФПС, а, скажем 50 или 100. Некоторые пользователи любят записывать компашки во время игры, которые при этом запарывабтся. В DOOM3 кажется привязка к 50 кадрам в секунду?
XProger (2006-01-27 11:37:00) [16]Nic, я тебе искренне сочувствую. Сам я способен заметить кадр длительностью 10 мс в секунду :) Т.е. при 100 фпс всё чётко и ясно видно...
А зачем разгружать процессор? Способен в 2 игры одновременно играть? ;)
P.S.
25 - кадр - мифы современности ;)
cyborg (2006-01-27 10:36:00) [17]Ограничивать нужно в аркадах, там большое кол-во кадров не требуется.
Большой ФПС в основном требуется в играх, где камеру вертеть можно, тут чем больше кадров в секунду, тем плавнее движение при перемещении точки зрения (камеры) будет.
Nic (2006-01-27 10:08:00) [18]Больше 30 кадров в секунду человек не воспринимает, так зачем грузить процессор?
Nic (2006-01-27 10:07:00) [19]Вот вопрос. Стоит ли ограничивать FPS скажем на уровне 30 кадров в секунду? Когда ФПС не ограниен, процессор загружается на все 100%. А если ФПС ограничен, то программа может отъедать совем немного.
Sphinx (2006-01-27 09:50:00) [20]Это из книг пошло, где программирование под DOS рассматривали и фпс ограничивали 20-30 кадрами в секунду...
Зачем - забыл, но можно поискать, таких книг в Инете полно.