Anton
и вычисление в каждой итерации текущего значения
Anonymous
double lastTime = getCurrentTime();
while (true)
{
double current = getCurrentTime();
double elapsed = current - lastTime; // он же dt, он же deltaTime
processInput();
update(elapsed);
render();
lastTime = current;
}
Kerrigan
Loyd
Maxim
Anton
Anton
как определяю в нем время
Anton
и тд
Anton
В каждом апдейте
Anonymous
в update ты его вызываешь
Anonymous
передавая dt
Anonymous
а тма уже от реализации
Anton
Причём dt ты используешь, чтобы получить время, прошедшее с начала анимации
Anonymous
Если easing умеет работать в elapsed то ничего не делаешь, умеет только с абсолютным временем - аккумулируешь dt
Anonymous
dt - это длительность кадра. Все!
Anonymous
точнее последнего кадра
Anton
Как вариант ты можешь просто в апдейте из текущего вычесть время начала анимации, получишь то же самое
Anton
Только тогда и dt не нужен будет
Anton
блин я все равно нихуя не понимаю
Anton
Так
Anton
Смотри
Anton
я понял только о вычислении времени среднего на выполнение кадра
Loyd
А уже то, когда вызывать этот просчет — это лучше смотреть на requestanimationframe и его реализацию
Anton
которое используется как параметр для сглаживания в изинге
Anton
requestAnimationFrame я знаю, но как работает в таком случае изинг, когда его запускать и тд не шарю
Kerrigan
короче
Kerrigan
смотри
Kerrigan
рендер не умеет нихуя
Kerrigan
все вычисления хуячишь в update
Anton
я смогу все понять, когда мне дадут пример реального кода - вместе с изингом, где есть ивентлуп, есть высчет времени, есть передача длительности, и где он в каждой иерации получает текущее значение изинга относительно длительности и кадра
Kerrigan
городишь там свои абстракции, формулы и прочее для вязкости
Anton
у меня другой вообще вопрос, а не в хуйне, тоесть вот я пример дал изингов, и еще скинули пример
Anton
но нигде нет ни документации ни примера
Kerrigan
а
Anton
я не понимаю вообще что происходит
Kerrigan
ща посмотрю
Kerrigan
я потерял ссылку в логах
Anton
абстрактную залупу я и сам сверху нагородить могу, и знаю когда примерно проводить обновление кадра относительно ивентлупа, но я все равно не понимаю как относительно ивентлупа задается длительность, какие параметры мне передавать изингу, какие данные получать и как вызывать
Anton
Ты запустил анимацию на десятой секунде. Она всего у тебя идёт 5 секунд.
1-й кадр: текущее время 11.3 секунд. Прошло с начала 1.3. Всего 5. 1.3/5 = 0.26. Это пихаешь в изинг в качестве t
2-й кадр: текущее время 13 секунд. Прошло с начала 3. Всего 5. 3/5 = 0.6. Это пихаешь в изинг в качестве t
3-й кадр: текущее время 13.6 секунд. Прошло с начала 3.6. Всего 5. 3.6/5 = 0.72. Это пихаешь в изинг в качестве t
Anton
http://orhanbalci.github.io/rust-easing/easer/index.html
https://github.com/michaelfairley/ezing
Anton
Вот 2 либы на пример
Anton
Вот вторая либа
Anton
Anton
это уже куда понятнее
Anonymous
Я же по второй тебе объяснил вроде
Anton
lerp(ezing::cubic_inout(t), начальная_позиция_по_иксу, конечная_позиция_по_иксу);
Anton
t я только что расписал как получать
Anton
Anonymous
t.me/rustlang_ru/96378
Anton
тоесть дельта время и по времени ты хорошо пояснил
Anton
но по изингу нет
Anton
что передавать, что он расчитывает, что передавать, и тд
Anton
ты объяснил так будто я уже знаю какие входные значения и откуда они берутся
Anton
а я этого не знал
Anton
Anonymous
У тебя есть позиция x, y
Anonymous
тебе нужно проанимировать ее из скажем {x: 0, y: 1} в {x: 1, y: 3}
John
Kerrigan
t - текущее время, d - сколько всего должна функция интреполяции работать, b - начальное значение, c - конечное
Anton
все, теперь я все понял нормально
Kerrigan
1. Засекаешь текущее время как 0 для начала твина
2. Каждый update вычисляешь дельту относительно времени начала
3. Кормишь изингу 1,2, начальное и конечные значения
4. На выходе значение которое должно быть сейчас
Kerrigan
так анимация работает даже в андроиде, лол
Anton
теперь я прям все отлично понял и как оно вписывается в ивентлуп и получает значения и тд
Anton
спасибо всем
Anonymous
делаешь в updatePos(dt) {
newX = easing(interpolator(t * vel), 0, 1)
newY = easing(interpolator(t * vel), 1, 3)
t += dt
return {x: newX, y: newY}
}
где newX, newY у тебя новые координаты для следующего кадра, vel - это скорость анимации
Anton
это сильно помогло
Anton
все ваши сообщения с пояснениями на всякий случай к себе сохранил
Anton
круто прям очень, меня эта проблема сильно доебывала
Anton
а как подступится я не знал, и какие материалы искать
Kerrigan
Anton
на запрос "how "easings" works with example c++" гугл или нихуя не давал, либо непонятную абстрактную зерь
Anton
но все равно оставались вопросы на которые я не получал ответа, и городил ебанутейшие теории работающие с глюками и непонятно как
Anonymous
Кстати совтую ресурс gamedev.ru, там есть wiki и faq и... весьма снобисткий форум)
Anton
без времени и тл
Anton
Anton
просто я не игру же пишу, а там много именно из разряда создания уже конечной игры на готовом движке
Anton
а фундаменталки разжеванной и понятной нет, и я 2 месяца изучаю сорцы, ебусь с фундаментальной методом научного "забивания гвоздей микроскопом"
Kerrigan
я когда-то тоже не игру писал