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

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

Ограничение FPS [VC, Windows]


Страницы:   1 2

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 кадрами в секунду...
Зачем - забыл, но можно поискать, таких книг в Инете полно.


Страницы:   1 2

Наверх

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