forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Синхронизация в Blitz3D (http://forum.boolean.name/showthread.php?t=7521)

ELIAS 28.12.2008 18:22

Синхронизация в Blitz3D
 
Здравствуйте!
Не подскажете как в Blitz3D профессионально сделать, чтобы скорость игры не зависела от FPS? То есть я хочу чтобы моя игра шла на всех компах одинаково!:p Ограничивать кадры не очень хочется... :( Да и это вообще не решение проблемы... Я слышал о каком-то ???твиннинге???:4to:. Это из этой области???

Вот я сейчас вот таким алгоритмом пользуюсь:
Код:

fps = высчитываю фпс
If fps>999 Then fps = 999
If fps>0 Then koef#= 500.0/fps

moveentity player, 0,0, speed*koef

Но этот алгоритм плохо работает...Особенно заметны перепады скорости при перепадах фпс((( очень неприииятныЙЙ эффект! :mad:

Может кто-то знает более хорошее и качественное решение?
Спасибо;)

impersonalis 28.12.2008 19:36

Ответ: Синхронизация в Blitz3D
 
ты юзаешь непосредственный дельта-тайминг.
Для дальнейшего сглаживания времени меж рендерами надо выдеелить логику и отрисовку в два разных блока и вызвать их с частотами F1 и F2 соответсвенно, причём F2<<F1. Далее - сделать возможность отключения отдельных блоков, исходя из априорных данных(собранных тестированием производительности, втом числе и непосредственно в игре) о занимаемом ими времени. Далее можно размазать блок логики на несколько проходов.
Рендер-твининг - тот же дельта-тайминг, только в профиль.
Поэкспериментируй с оптимизацией вывода и вертикальной синхронизацией (если это возможно\уместно для данной програмы)

ELIAS 28.12.2008 20:54

Ответ: Синхронизация в Blitz3D
 
:4to:
Спасибо, impersonalis, только вот это:
Цитата:

Для дальнейшего сглаживания времени меж рендерами надо выдеелить логику и отрисовку в два разных блока и вызвать их с частотами F1 и F2 соответсвенно, причём F2<<F1. Далее - сделать возможность отключения отдельных блоков, исходя из априорных данных(собранных тестированием производительности, втом числе и непосредственно в игре) о занимаемом ими времени. Далее можно размазать блок логики на несколько проходов
Это навряд ли мне грозит...пока надеюсь(((

Можно пока поподробней про Рендер-твининг??? Чем он отличается от дельта-тайминга, как его делать...:)

ЗЫ: Я делаю 3d аркаду-платформер

Damp 29.12.2008 20:59

Ответ: Синхронизация в Blitz3D
 
Твининг хорошая штука, но бываю трудности. Вот например я не могу тени прикрутить, при синхронизации с твином. Выбор встает либо тени либо твининг.
Суть примерно такая: если ты просто ограничил количество кадров, то при падении фпс ниже твоего ограничения игра начнет замедляться, если с твином, то все будет идти с той же скоростью, только как бы рывками.
Дельта тайминг сложно провести через всю игру, нужно будет ко всему добавлять дельту - к перемещения, вращения, изменения размеров, альфы и цвета (для спрайтов) и многое другое. А твининг избавляет от этого, с лучшим эффектом промежуточные кадры.

Graphics3D 1024,768,32,1
cam=CreateCamera ()
MoveEntity cam,0,0,-5
RotateEntity CreateLight (),30,30,0
cube=CreateCube()
EntityColor cube ,100,150,250

FPS =30
period = 1000 / FPS
Time = MilliSecs () - period
Repeat
Repeat
elapsed = MilliSecs () - Time
Until elapsed
ticks = elapsed / period
tween# = Float (elapsed Mod period) / Float (period)
For framelimit = 1 To ticks
If framelimit = ticks CaptureWorld
Time = Time + period
;===
TurnEntity cube,0,1,1
If KeyDown(57) Delay ( Rand(20,40))
;===
UpdateWorld
Next
RenderWorld tween#
Flip 0 ; или 1
Until KeyHit(1)
End

tormoz 29.12.2008 21:50

Ответ: Синхронизация в Blitz3D
 
Цитата:

Сообщение от ELIAS (Сообщение 93065)
Ограничивать кадры не очень хочется...

Почему бы и нет ?

Цитата:

:( Да и это вообще не решение проблемы...
Для твоей игры это как раз идеальный вариант.
;)


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

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