Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Общие темы > Болтовня

Болтовня Разговоры на любые темы (думайте, о чем пишите)

Ответ
 
Опции темы
Старый 07.12.2013, 23:39   #1
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Delta timing

Проблема с дельта таймингом. При скачках в 3-4 миллисекунды заметны рывки при перемещении. Без дельта таймнига все отлично. Есть ли смысл его использовать, если фпс точно меньше 60?
UPD
Рывки оказались из-за округлений Теперь беда в другом.
Допустим герой прыгнул в момент времени, в котором dt(время с предыдущего обновления игры) было 40 миллисекунд. Сила его прыжка увеличилась сильно увеличилась по сравнению с нормой. Затем, dt опять пришло к нормальным 16.6666 миллисекундам. Поэтому коэффицент G, который отвечает за ускорение свободного падения опять нормальный. В результате получаем гигантский прыжок. Как этого избежать?
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 00:43   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Delta timing

Если это Unity, то для физики есть FixedUpdate и Time.fixedDeltaTime

Но по сути если провести аналогию с твинингом в блице, то тебе просто надо вызывать логику только допустим 30 раз в секунду и если с предыдущего обновления прошло времени в два раза больше, то выполнить логику два раза.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 02:33   #3
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Delta timing

Оно то хорошо, когда числа ровные. Дробное количество раз не получится же логику выполнить. Мне поэтому и интересно, уместно ли это для фпс ниже стандартного. Понятное дело, что это необходимо для ребят с крутыми конфигами, чтобы они по карте не гоняли как сверхскоростные болиды.
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 11:05   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Delta timing

Да в чем проблема я не понимаю?

float ellipsedTime 0;
public 
float timeStep 1000f 60f;

void Update()
{
    
ellipsedTime += Time.deltaTime 1000f;

    while(
ellipsedTime >= timeStep)
    {
         
ellipsedTime -= timeStep;
         
UpdateLogic();
    }
}

void UpdateLogic()
{
   
// обновление логики с фиксированным шагом времени в timeStep мс


__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 11:48   #5
KCEPOKC
Принтер
 
Аватар для KCEPOKC
 
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 569
Написано 342 полезных сообщений
(для 1,242 пользователей)
Ответ: Delta timing

Что эта тема делает в болтовне?
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (11.12.2013)
Старый 08.12.2013, 13:52   #6
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Delta timing

В данном способе 2 проблемы.
Если таки у игрока больше 60 фпс - цикл вообще не запустится.
Если у игрока 29 фпс, разницы с 30 фпс почти не должно быть, однако update() будет выполнено 3 раза, в то время как при 30 фпс - 2 раза.
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 16:30   #7
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Delta timing

Если апдейт логики можно сделать только с фиксированным шагом, то лучше действительно сделать жесткую привязку к fps и ограничить его.
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 16:34   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Delta timing

Сообщение от Nikich Посмотреть сообщение
В данном способе 2 проблемы.
Если таки у игрока больше 60 фпс - цикл вообще не запустится.
Если у игрока 29 фпс, разницы с 30 фпс почти не должно быть, однако update() будет выполнено 3 раза, в то время как при 30 фпс - 2 раза.
Ты верно код читал не внимательно или его не попробовал.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 19:10   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Delta timing

Исходя из первого поста, почему сила прыжка зависит от dt? Она не должна, при прыжке персонаж получит ускорение в 100 единиц. Далее при применении ускорения - применяешь dt.
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 22:20   #10
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Delta timing

moka
Сейчас так и делаю. Но баланса все равно нету: игрок с маленьким фпс не может прыгнуть так же высоко, как игрок с нормальным.
PAX
public float timeStep = 1000f / 60f;
Известные 16(6) мс.
ellipsedTime += Time.deltaTime * 1000f;
Допустим у пользователя супер мощный конфиг, и у него игра идет со 120 ФПС, то бишь 8(3) мс.
while(ellipsedTime >= timeStep)
Никогда не произойдет, так как 8(3) точно меньше чем 16(6).
(Offline)
 
Ответить с цитированием
Старый 08.12.2013, 23:06   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Delta timing

А теперь посмотри на эту строку внимательно:
ellipsedTime += Time.deltaTime 1000f
Время накапливается (оператор += тебе ничего не сказал?), за два отрисованных кадра будет 2 * 8(3) и сработает логика. Я ж говорю, невнимательно код смотрел и не пробовал.

В твоем примере 29 FPS будет 30 раз срабатывать логика, она даже с 15 FPS будет 30 раз срабатывать. И даже имея 128 FPS с шагом в 1000f / 60f логика будет срабатывать 60 раз в секунду в среднем.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Samodelkin (09.12.2013)
Старый 11.12.2013, 02:06   #12
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Delta timing

При уменьшении фпс, увеличивается количество вызова логики, что будет уменьшать фпс. Получаем рекурсивный проигрыш производительности.
(Offline)
 
Ответить с цитированием
Старый 11.12.2013, 07:05   #13
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Delta timing

Не хочешь признать, что был не прав. Ладно.
Сообщение от Nikich Посмотреть сообщение
При уменьшении фпс, увеличивается количество вызова логики, что будет уменьшать фпс. Получаем рекурсивный проигрыш производительности.
Что такое рекурсивный проигрыш производительности? Ты хочешь замедлять игры при FPS меньше нормы или чтобы игра работала нормально? Твоя логика (за 30 FPS) работает столько же или больше, сколько и вывод одного кадра на экран?
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 11.12.2013 в 09:16.
(Offline)
 
Ответить с цитированием
Старый 11.12.2013, 16:15   #14
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Delta timing

Я был не прав, да, не заметил "+=". И не спорю, что при слабой логике это было бы отличным решением.
Но решение с обычным домножением скоростей на deltaTime кажется более верным и логичным, разве нет?
(Offline)
 
Ответить с цитированием
Старый 11.12.2013, 19:42   #15
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Delta timing

Если физика зависит от времени, то нет. Логичнее использовать фиксированный шаг времени. Если физика рассчитывается на больших интервалах времени, то меньше точность.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com