Изменение framerate объекту(entity)

Сообщения
9
Реакции
1
Доброго времени суток. Столкнулся с проблемой изменения pev_framerate объекту, у которого на данный момент проигрывается анимация. Дело в том что когда я меняю pev_framerate объекту с 1.0 на 0.33, то кадр анимации сбивается. Как изменить pev_framerate объекту и оставить тот же кадр что и был до изменения.

Создаю объект и задаю анимацию:
Код:
    new iAnimDesired, Float:flFrameRate, Float:flGroundSpeed, bool:bLoops, Float:fGameTime = get_gametime();
    static iszFuncWall;
    if(iszFuncWall || (iszFuncWall = engfunc(EngFunc_AllocString, "func_wall"))) iEntity = engfunc(EngFunc_CreateNamedEntity, iszFuncWall);
    set_pev(iEntity, pev_movetype, MOVETYPE_NOCLIP);
    engfunc(EngFunc_SetModel, iEntity, "models/player/gign/gign.mdl");
    if((iAnimDesired = lookup_sequence(iEntity, "forward", flFrameRate, bLoops, flGroundSpeed)) == -1) iAnimDesired = 0;
    set_pev(iEntity, pev_frame, 0.0);
    set_pev(iEntity, pev_framerate, 1.0);
    set_pev(iEntity, pev_animtime, fGameTime);
    set_pev(iEntity, pev_sequence, iAnimDesired);
Изменяю framerate и кадр сбивается:
Код:
set_pev(iEntity, pev_framerate, 0.33);
Пробовал получать данные до и после изменения, pev_frame всегда равен 0.
Код:
client_print(0, print_chat, "pre %d %f", pev(iEntity, pev_frame), pev(iEntity, pev_frame));
set_pev(iEntity, pev_framerate, 0.33);
client_print(0, print_chat, "post %d %f", pev(iEntity, pev_frame), pev(iEntity, pev_frame));
Log:
Код:
pre 0 0.000000
post 0 0.000000
Так же пробовал шаманить с pev_animtime, при изменении значения кадр меняется, но как подобрать нужное значение?

Demo:
 
Сообщения
846
Реакции
525
Помог
13 раз(а)
client_print(0, print_chat, "post %d %f", pev(iEntity, pev_frame), pev(iEntity, pev_frame));

я конечно не эксперт, но в fm разве не так получают флоаты?
Код:
new Float:flFrame; pev(iEntity, pev_frame, flFrame);
client_print(0, print_chat, "FRAME: %.2f", flFrame);
оффтоп:
а чарджер хорош, красиво
 
Сообщения
156
Реакции
205
Помог
5 раз(а)
Не знаю на сколько толковый вариант, но может стоит попробовать детектить смену анимацию и присваивать значение времени 0. На нужном моменте включения эффекта замедления принимать время, определять какой сейчас кадр(N), затем присваивать новый фреймрейт вместе с начальным кадром N+1.
 
Сообщения
9
Реакции
1
client_print(0, print_chat, "post %d %f", pev(iEntity, pev_frame), pev(iEntity, pev_frame));

я конечно не эксперт, но в fm разве не так получают флоаты?
Код:
new Float:flFrame; pev(iEntity, pev_frame, flFrame);
client_print(0, print_chat, "FRAME: %.2f", flFrame);
Если не ошибаюсь, то таким способом получают только вектора или строку. Целые, дробные и булевые значения возвращает функция pev().
5 Июл 2019
Могу ошибаться, по этому перепроверил:

Код:
new Float:fFrame, iFrame; pev(iEntity, pev_frame, fFrame);
pev(iEntity, pev_frame, iFrame);
client_print(0, print_chat, "pre %f | %f | %d | %d", fFrame, pev(iEntity, pev_frame), iFrame, pev(iEntity, pev_frame));
set_pev(iEntity, pev_framerate, 0.33);
pev(iEntity, pev_frame, fFrame);
pev(iEntity, pev_frame, iFrame);
client_print(0, print_chat, "post %f | %f | %d | %d", fFrame, pev(iEntity, pev_frame), iFrame, pev(iEntity, pev_frame));

log:
Код:
pre 0.000000 | 0.000000 | 0 | 0
post 0.000000 | 0.000000 | 0 | 0
 
Сообщения
9
Реакции
1
Не знаю на сколько толковый вариант, но может стоит попробовать детектить смену анимацию и присваивать значение времени 0. На нужном моменте включения эффекта замедления принимать время, определять какой сейчас кадр(N), затем присваивать новый фреймрейт вместе с начальным кадром N+1.
Не совсем тебя понял, но я не могу изменить начальный pev_animtime(при присвоении анимации), т.к. время задается таким образом что бы анимация объекта совпала с кадром анимации игрока(т.е. что бы анимации объекта и игрока были синхронны, и когда она запускается на объекте, подгоняется нужное время что бы анимации проигрывались синхронно). Так же как я привел выше, pev_frame(кадр) объекта всегда равен 0. Если не усложнит, можешь расписать свой алгоритм более подробно, мало что понял из твоего сообщения. А именно:
"принимать время" - какое именно время?
"вместе с начальным кадром N+1" - чему равен N, и почему +1? И чему должен равняться начальный кадр?
 

Garey

ninjaCow
Сообщения
422
Реакции
1,056
Помог
10 раз(а)
вы в этой же функции смотрите pev_frame? скорее всего анимация еще не успела проиграться поэтому и pev_frame равен 0. Сделайте think и смотрите по мере проигрывания анимации pev_frame
 
Сообщения
9
Реакции
1
вы в этой же функции смотрите pev_frame? скорее всего анимация еще не успела проиграться поэтому и pev_frame равен 0. Сделайте think и смотрите по мере проигрывания анимации pev_frame
Я смотрю pev_frame в функции изменения pev_framerate. pev_framerate я меняю в рандомный момент с помощью команды(это видно на демо).
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
Сообщения
9
Реакции
1

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу