![]() |
Синхронизация в Blitz3D
Здравствуйте!
Не подскажете как в Blitz3D профессионально сделать, чтобы скорость игры не зависела от FPS? То есть я хочу чтобы моя игра шла на всех компах одинаково!:p Ограничивать кадры не очень хочется... :( Да и это вообще не решение проблемы... Я слышал о каком-то ???твиннинге???:4to:. Это из этой области??? Вот я сейчас вот таким алгоритмом пользуюсь: Код:
fps = высчитываю фпс Может кто-то знает более хорошее и качественное решение? Спасибо;) |
Ответ: Синхронизация в Blitz3D
ты юзаешь непосредственный дельта-тайминг.
Для дальнейшего сглаживания времени меж рендерами надо выдеелить логику и отрисовку в два разных блока и вызвать их с частотами F1 и F2 соответсвенно, причём F2<<F1. Далее - сделать возможность отключения отдельных блоков, исходя из априорных данных(собранных тестированием производительности, втом числе и непосредственно в игре) о занимаемом ими времени. Далее можно размазать блок логики на несколько проходов. Рендер-твининг - тот же дельта-тайминг, только в профиль. Поэкспериментируй с оптимизацией вывода и вертикальной синхронизацией (если это возможно\уместно для данной програмы) |
Ответ: Синхронизация в Blitz3D
:4to:
Спасибо, impersonalis, только вот это: Цитата:
Можно пока поподробней про Рендер-твининг??? Чем он отличается от дельта-тайминга, как его делать...:) ЗЫ: Я делаю 3d аркаду-платформер |
Ответ: Синхронизация в 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 |
Ответ: Синхронизация в Blitz3D
Цитата:
Цитата:
;) |
Часовой пояс GMT +4, время: 15:02. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot