Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Ограничение FPS   Найти похожие ветки 

 
VolanD666   (2006-01-27 08:10) [0]

Раньше, когда я создавал новый проект, то моя функция Render содержала ~ такой код:
  NowTime=GetTickCount();
 
  if ( ( NowTime-LastTime ) > 1000/OptimalFPS ) {
   TempFPS=1000/( NowTime-LastTime );
   LastTime=NowTime;
   
   Render();    
  }

Но недавно я посмотрел несколько примеров, где этих строк просто нет!
Там просто высчитывается "коэффициент перемещения" и все, дальше идет Render(). Так нужны ли эти строки?


 
XProger ©   (2006-01-27 08:15) [1]

а зачем?


 
VolanD666   (2006-01-27 08:26) [2]

Ну я не знаю, во всех книгах так пишут...


 
Cash ©   (2006-01-27 08:50) [3]

VolanD666   (27.01.06 08:10):
На рендер ограничение както странно выглядит.
По моему оно даже незачем. А вот на перемещение я бы поставил такое,
да вобщем у меня они везде только на перемещение я стоят!
А рендер с максимальной скоростью надо бы гнать.


 
Sphinx ©   (2006-01-27 09:50) [4]

Это из книг пошло, где программирование под DOS рассматривали и фпс ограничивали 20-30 кадрами в секунду...
Зачем - забыл, но можно поискать, таких книг в Инете полно.


 
Nic ©   (2006-01-27 10:07) [5]

Вот вопрос. Стоит ли ограничивать FPS скажем на уровне 30 кадров в секунду? Когда ФПС не ограниен, процессор загружается на все 100%. А если ФПС ограничен, то программа может отъедать совем немного.


 
Nic ©   (2006-01-27 10:08) [6]

Больше 30 кадров в секунду человек не воспринимает, так зачем грузить процессор?


 
cyborg ©   (2006-01-27 10:36) [7]

Ограничивать нужно в аркадах, там большое кол-во кадров не требуется.
Большой ФПС в основном требуется в играх, где камеру вертеть можно, тут чем больше кадров в секунду, тем плавнее движение при перемещении точки зрения (камеры) будет.


 
XProger ©   (2006-01-27 11:37) [8]

Nic, я тебе искренне сочувствую. Сам я способен заметить кадр длительностью 10 мс в секунду :) Т.е. при 100 фпс всё чётко и ясно видно...
А зачем разгружать процессор? Способен в 2 игры одновременно играть? ;)

P.S.
25 - кадр - мифы современности ;)


 
Nic ©   (2006-01-27 11:41) [9]


> XProger ©   (27.01.06 11:37) [8]
> Nic, я тебе искренне сочувствую. Сам я способен заметить
> кадр длительностью 10 мс в секунду :) Т.е. при 100 фпс всё
> чётко и ясно видно...
> А зачем разгружать процессор? Способен в 2 игры одновременно
> играть? ;)
>
> P.S.
> 25 - кадр - мифы современности ;)

Не обязательно ограничивать на 30 ФПС, а, скажем 50 или 100. Некоторые пользователи любят записывать компашки во время игры, которые при этом запарывабтся. В DOOM3 кажется привязка к 50 кадрам в секунду?


 
Cash ©   (2006-01-27 11:43) [10]

Да действительно, на скорости выше 100 квс (fps) гораздо лучше
воспринимается хыть программный курсор, который рисуется со всякими
примочками.


 
DeadMeat ©   (2006-01-27 12:12) [11]

http://www.nvworld.ru/docs/30fps.html


 
XProger ©   (2006-01-27 12:36) [12]

Nic, нет там никаких привязок, что за глупости вообще... зачем оно? :)


 
Зм1й ©   (2006-01-27 14:35) [13]

А как тогда перирисовывать окно, если не ограничивать fps? Я вот таймером ограничиваю, и в wm_timer вызываю InvalidateRect, а как другим способом?


 
Кефир87 ©   (2006-01-27 14:44) [14]

Во первых отключить к чертям верт. синхронизацию.
Во вторых (я так делаю) в бесконечном цыкле, либо принимаем сообщение (если таковое есть) либо рисуем. Вот. Никаких ограничений для фпс.


 
Nic ©   (2006-01-27 15:15) [15]


> XProger ©   (27.01.06 12:36) [12]

Читал когда-то в какой-то статья, когда Дум 3 ещё не вышла.

> DeadMeat ©   (27.01.06 12:12) [11]

Спасибо, сейчас изучим :)


 
Nic ©   (2006-01-27 15:17) [16]

Читал когда-то в какой-то статье, когда Дум 3 ещё не вышла.


 
Зм1й ©   (2006-01-27 15:22) [17]


> Во первых отключить к чертям верт. синхронизацию.

А это как? :)

> Во вторых (я так делаю) в бесконечном цыкле

Это получается, цикл надо делать не в WinProc, а после GetMessage?
(Извиняюсь за невежество)


 
Кефир87 ©   (2006-01-27 15:32) [18]


>
> А это как? :)

вертикальная синхронизация, это когда 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:51) [19]


> Кефир87 ©  

Спасибо


 
Gnobobel   (2006-01-27 18:43) [20]

Насколько я понял коэфицент перемещения это числоо, которое умножается на скорость, чтобы внезависимости от тормозов игры объекты двигались на V пикселей в определённый промежуток времени. Это так?


 
XProger ©   (2006-01-27 19:01) [21]

Gnobobel, так


 
Gnobobel   (2006-01-27 22:50) [22]

Ладно, пойду припишу к своей гаме такое...


 
VolanD666   (2006-01-31 19:20) [23]

А коэффициент действительно действует :-)



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.052 c
15-1161664524
Stanislav
2006-10-24 08:35
2006.11.12
Кто легально продавал свой софт?


15-1161338522
зритель
2006-10-20 14:02
2006.11.12
умер Эммануил Виторган


15-1161855795
RebroFF
2006-10-26 13:43
2006.11.12
Есть ли шансы у самоучек стать настоящими профи?


2-1161831481
viper03
2006-10-26 06:58
2006.11.12
вывод картинки в DBCtrlGrid


2-1162015160
Riply
2006-10-28 09:59
2006.11.12
Видимость переменных из private.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский