forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Уход от привязки к FPS (http://forum.boolean.name/showthread.php?t=3726)

vadya 22.06.2007 22:05

Уход от привязки к FPS
 
решил сделать уход от привязки к FPS как в FAQ создаем фпс. сделал так
Function update_igrok()
If user_time=0 user_time=MilliSecs()
new_time=MilliSecs()
delta_t=(new_time-user_time)
user_time=new_time

If EntityDistance(igrok,piv)>20
MoveEntity igrok,0,0,.1*delta_t
If AnimSeq(igrok)=0 Animate igrok,1,.5,1,trans
Else
If AnimSeq(igrok)=1 Animate igrok,2,1,0,trans

EndIf

TranslateEntity igrok,0,-.03*delta_t,0
End Function
но у меня игрок дергается при передвижении. скажите где моя ошибка и как ее исправить пожалуйста

alcoSHoLiK 22.06.2007 22:35

Re: Уход от привязки к FPS
 
Нужно выяснить смысл величины delta_t.
Когда разрабатывается игра, она нацелена на такую-то частоту обновления, допустим, 100 кадров в секунду. Это значит, что если у игрока игра выдает 100 ФПС, delta_t должна быть равна единице. Если реальный показатель ФПС ниже расчетного, нужно ускорить все движения, то есть delta_t > 1. Если же игра идет слишком быстро, delta_t < 1.
Теперь можно подумать о реализации:
Код:

time = 0

; Главный цикл
While 1
        ticks = Millisecs()        ; текущее время

        elapsed = ticks - time
        time = ticks

После первого кадра значение time инициализируется текущим временем (это можно сделать и раньше, при желании). В elapsed хранится время, потраченное на обработку одного кадра (прошлого кадра).
При ФПС = 100, на обработку одного кадра уходит времени
Код:

const TARGET_FPS = 100

; 1000 миллисекунд / n кадров в секунду
period# = Float(1000) / Float(TARGET_FPS)

Мы уже знаем, что при ФПС = 100 delta_t = 1. Т.е. уже должно быть понятно, что надо что-то делить на что-то еще. Если ФПС > 100, delta_t должно быть меньше единицы. При этом на один кадр тратится времени меньше, чем при ФПС = 100. А если поделить меньшее число на большее, мы получим значение меньше единицы. Таким образом,
Код:

const TARGET_FPS = 100

; 1000 миллисекунд / n кадров в секунду
const period# = Float(1000) / Float(TARGET_FPS)


time = 0

; Главный цикл
While 1
        ticks = Millisecs()        ; текущее время

        elapsed# = ticks - time
        time = ticks

        delta_t# = elapsed / period

        UpdateGame(delta_t)
       
        Render()
Wend

Если же ФПС < 100, elapsed будет больше, чем period, и delta_t соответственно примет значение больше 1.

vadya 23.06.2007 09:34

Re: Уход от привязки к FPS
 
спс щас попробую

vadya 23.06.2007 11:01

Re: Уход от привязки к FPS
 
не получается:( выходит ошибка вариабл тип мистак

alcoSHoLiK 23.06.2007 11:28

Re: Уход от привязки к FPS
 
Где ошибка?

vadya 24.06.2007 21:41

Re: Уход от привязки к FPS
 
delta_t# = elapsed / period

alcoSHoLiK 24.06.2007 22:53

Re: Уход от привязки к FPS
 
Проверь, чтобы у elapsed и period был тип Float.

shaman_al 26.06.2007 13:02

Re: Уход от привязки к FPS
 
Столкнулся с подобной проблемой.
Подскажите плиз, какая функция возвращает значение ФПС и как можно ограничить максимум ФПС (например 25 установить) ?

jimon 26.06.2007 13:46

Re: Уход от привязки к FPS
 
shaman_al
нету таких функций, самому писать надо

HolyDel 26.06.2007 20:17

Re: Уход от привязки к FPS
 
получить FPS
fps=1000/(millisecs()-a_time)
a_time=millisecs()

ограничить фпс:
while b_time>millisecs()-(1000/требуемый_фпс)
wend
b_time=millisecs()

alcoSHoLiK 26.06.2007 22:25

Re: Уход от привязки к FPS
 
http://blitzetc.boolean.name/articles/stab.htm
Ограничить так можно:
Код:

timer = CreateTimer(25)

; Главный цикл
While 1
    WaitTimer(timer)
    ;...
Wend


HolyDel 27.06.2007 01:22

Re: Уход от привязки к FPS
 
раз уж про ето тема зашла то можно ставить flip 0 для того чтобы комп тупо не ждал пока картинка прорисуется на мониторе, а занялся бы чем нибудь более полезным.

ЛысыЙ_Чук-Иванчук 27.06.2007 10:32

Re: Уход от привязки к FPS
 
Правильно Flip 0 и Таймер на 25 фпс... и будет само то!!!!


Часовой пояс GMT +4, время: 18:32.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot