Используя Lua, я сделал функцию для кубической (замедление / «ускорение», затем замедление / «замедление» впоследствии) интерполяции из одного числа в другое;SimpleSpline принимает число от 0 до 1 (время, когда анимация идет, самый простой способ), а SimpleSplineBetween делает то же самое, но удерживает его между двумя заданными минимальными / максимальными значениями.
function SimpleSpline( v )
local vSquared = v*v
return (3 * vSquared - 2 * vSquared * v)
end
function SimpleSplineBetween( mins, maxs, v )
local fraction = SimpleSpline( v )
return (maxs * fraction + mins * (1 - fraction))
end
Все работаетхорошо.Однако я столкнулся с небольшой проблемой.Я хотел бы, чтобы это было немного более динамическим .Например, предположим, что мои «mins» равны 0,5, а мои «maxs» равны 1, тогда у меня есть переменная времени, которую я передаю как V;мы скажем, что это 0,5, поэтому наше текущее значение интерполяции составляет 0,75.Теперь, давайте также предположим, что внезапно «maxs» резко поднялся до 0,25, так что теперь у нас есть новая цель, которую нужно достичь.
Мой текущий подход к обработке ситуаций, подобных приведенным выше, состоит в том, чтобы сбросить наше «время»переменная и измените «мин» на наше текущее значение;в приведенном выше случае 0,75 и т. д. Однако это приводит к очень заметным «остановкам» или «остановкам» в анимации, поскольку они полностью сбрасываются.
У меня вопрос, какя могу сделать это динамически без этой остановки?Я бы хотел, чтобы он плавно перешел от одного номера цели к другому.