А у тебя точно кейфрейм верно в анимации стоит? Частая ошибка такая, что последний кадр анимации равен первому, а от этого естественно получится как-будто анимация подергивается. Ну условно, у тебя шарик должен повернуться на 360 градусов за 360 секунд, стало быть за последнюю секунду шарик должен стремиться к начальному положению, но не достигать его.
В анимациях некоторых моделей передвигаю последний кадр за пределы таймлайна на один кадр. В этой модели я так не делал, мне было достаточно убрать интерполяцию между последним и первым кадром для плавной цикличности анимации. Во вьювере анимация отображается нормально, если значение фпс выставлено не мизерное(в противном случае вращения не будет). В Blender анимация отображается корректно.
Дядя Миша писал: Ну его не стоит ставить менее 0.01 или более 10.
framerate 1, fps в qc 30 - скорость вращения высокая; иногда перескакивают кадры;
framerate 1, fps в qc 10 - скорость ниже, но анимация воспроизводится уже некорректно. Кадры идут примерно так: 1 2 3 4 5 3 4 5 6 7 8 9 10 8 9 10 11...
framerate 1, fps в qc 1 - скорость приемлемая, воспроизведение анимации некорректное. Слайдшоу из случайных кадров будто: 1 4 122 124.
framerate 10, fps в qc 30, 10 - высокая скорость вращения
framerate 10, fps в qc 1 - аналогично framerate 1, fps в qc 10
framerate 10, fps в qc 0.125 - воспроизводится отрезок анимации, да и то некорректно. Если в анимации 240 кадров, то воспроизводится лишь несколько кадров, грубо говоря: 1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11
framerate 240, fps в qc 0.125 - хорошая скорость анимации и плавность, но иногда проскакивают кадры. Я имею в виду, что был порядок в плане воспроизведения кадров от 1 до 240, но в какой-то момент анимация может пропустить 100 кадров(визуально).
При framerate ниже 0.01 анимации, насколько я помню, вообще не было. А при выставлении значений выше количества кадров анимации(240, 680, 1024 и т.д.) скорость анимации не изменялась, но менялся характер воспроизведения(с пролагами).
Если скорость воспроизведения выше общего фреймрейта, то кадры и будут перескакивать, естественно.
У одинарного вещественного точность не бесконечная, а в голдсорсе фреймрейт не квантизирован, в отличие, от сорса, например.
Вопрос - как определить энтитю локального игрока так, чтобы быть уверенным, что это энтитя именно мы, а не кто-то другой?
Поясню: у меня есть боты на сервере. Есть визуальный эффект на экране, который зависит от значения gEngfuncs.GetLocalPlayer()->curstate.vuser1.z. Пока я в игре - все хорошо. Но если я зайду в спектаторы (становлюсь невидимым, несолидным и т.д.) я иногда вижу этот эффект на экране, когда у какого-то бота, по всей видимости, изменилось это значение (ведь он тоже игрок).
В моем понимании выходит, что GetLocalPlayer возвращает мне локального игрока, а т.к. я в спеках и как бы "не совсем игрок", он подсовывает данные бота, ведь он локальный.
Aynekko режим спектатора - это когда подключаешься к HLTV Proxy. Прокси, по сути, такой же клиент, подключенный к серверу. А вот подключенные к прокси - уже не клиенты, а зрители-спектаторы. А "зайти в спектаторы" - перейти в режим обсервера. Игрок остаётся таким же подключенным клиентом, так же занимает слот на сервере, и к нему применяются все те же правила, что и к другим клиентам. Единственное, работает фильтр по pev->iuser1, отсекая всё ненужное и добавляя нужное. Чтобы у тебя не вылезал эффект, когда ты обсервер, добавь проверку на g_iUser1. Можно пойти дальше, и рисовать чужой эффект при наблюдении от первого лица. Через g_iUser2 можно получить индекс наблюдаемого игрока, а после его vuser1.z.
Добавлено 27-04-2023 в 18:17:
Цитата:
Aynekko писал: он подсовывает данные бота, ведь он локальный
Ku2zoff писал: Чтобы у тебя не вылезал эффект, когда ты обсервер, добавь проверку на g_iUser1
Спасибо. Оказалось, дело и не в vuser. Там было еще одно условие, которое я меняю из CHudHealth::MsgFunc_Damage. Почему этот msg вызывают боты, когда я в наблюдателях, я пока не понял. Проверка на g_iUser1 помогла.