В документах ничего не сказано по теме. Однако, если вы попробуете, вы обнаружите, что пользовательская функция замедления принимает четыре параметра (только nil
от пятого параметра и выше). Некоторая тренировка показывает, что пользовательская функция замедления выглядит так:
function easer(currentTime, duration, startValue, targetDelta)
...
end
Объяснение
currentTime
/ duration
: duration
говорит само за себя, а currentTime
просто [0..duration]
в ходе перехода.
startValue
: снимок значения в начале перехода.
targetDelta
: Это значение целевого значения, минус startValue
, т.е. расстояние, которое должна пройти функция замедления
Аннотированный пример
Скажем, у вас есть следующий код:
foo.frob = 1
transition.to(foo, {time=1001, frob=0.25})
То есть, вы хотите переход foo.frob
из [1..0.25]
. Тогда:
function easer(currentTime, duration, startValue, targetDelta)
-- currentTime: [0..1001]
-- duration: 1001
-- startValue: 1
-- targetDelta: to-from = 0.25-1 = -0.75
return startValue + (currentTime/duration) * targetDelta -- a linear interpolator
end
Возвращаемое значение
Возвращаемое значение должно быть startValue
в начале и startValue+targetDelta
в конце. Вполне разрешено покидать этот диапазон; однако, как только переход останавливается, он автоматически становится startValue+targetDelta
, поэтому сделайте его startValue
и startValue+targetDelta
в начале и конце.
Но вы можете проявить изобретательность между началом и концом, и позволить функции подпрыгивать, например, как некоторые из включенных функций замедления уже делают.