DeltaTimes

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
В Unity есть такая фишка Delta Time

Интересно, есть ли возможность реализовать такое-же в SourcePawn?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
GetGameTime - в OnGameFrame в глобальную переменную записывать значение, затем разность между текущим значением и значением, записанную в глобальную переменную будет как раз разницой в миллисекундах между двумя фреймами.
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
GetGameTime - в OnGameFrame в глобальную переменную записывать значение, затем разность между текущим значением и значением, записанную в глобальную переменную будет как раз разницой в миллисекундах между двумя фреймами.
Как-то неуверенно работает. Раз-через раз.
C-подобный:
0.059997
0.000000
0.000000
0.059997
0.000000
0.000000
0.060005
0.000000
0.000000
0.060005
0.000000
0.000000
0.059997
0.000000
0.000000
0.059997
0.000000
0.000000
0.059997
0.000000
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@tonline_kms65_1, что-то типа этого использовал?
C-подобный:
public void OnGameFrame()
{
    if(!GetClientCount()) return;

    static float time, now;
    now = GetGameTime();
    PrintToServer("%f", FloatSub(now, time));
    time = now;
}
C-подобный:
0.015014
0.014984
0.015014
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
0.014984
0.015014
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
public void OnGameFrame() { if(!GetClientCount()) return; static float time, now; now = GetGameTime(); PrintToServer("%f", FloatSub(now, time)); time = now; }
Нет конечно.
Я пытался получить разницу между фреймами в OnPlayerRunCmd(перехватывал команды с клавиш).
Брал разницу, между запущенным постоянно получением общего времени в OnGameFrame() и, соответственно, при нажатии клавиши в OnPlayerRunCmd.
Пытался понять принцип - не понял, и не понравилось постоянно переполняющееся глобальное значение, это нужно было бы его где-то обнулять. От такой затеи отказался, потому что она толком не работала.

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

public void OnGameFrame() { if(!GetClientCount()) return; static float time, now; now = GetGameTime(); PrintToServer("%f", now-time); time = now; }

Ок! Работает отлично!
Спасибо за интересное решение!

========================================================================================
В продолжение темы - может быть кто возился с такой проблемой как сглаживание поворотов ENT при управлении с клавиатуры.

На видео сделал сравнение поворотов с клавиатуры игрока и своей ENT, это команды IN_RIGHT и IN_LEFT.
Видно что у игрока вращение происходит сглажено(не плавно! а именно сглажено), на дроне я уже замучался, перепробовал все свои варианты, этот вариант более менее, но всё-равно видно жесткость при вращении. Это я попробовал применить как-бы сглаживание, которое применяю на пушках при их поворотах, плавный разгон и плавная остановка. Получше, но все равно не то, жесткость заметно, на пушках вид со стороны, поэтому там такое не критично вообще, а здесь камера - все косяки сразу в глаза бросаются.

Поворачиваю изменением углов. Движения прямо, назад или стрейфом это я сделал векторами, векторами там всё отлично, сглаживание работает на ура, но при повороте углов не соображу как можно сделать.

Для примера - в юнити есть лерп(и её разновидности) для такого вида сглаживаний, а здесь то такого нет!
По какому принципу, точно, этот лерп работает я тоже не знаю. Я так понял что это линейная интерполяция(как на станках с ЧПУ), но у меня и так шаг мизерный, куда еще меньше-то. Должно по идее работать но не работает.
 
Последнее редактирование:
Сверху Снизу