В этом видеоуроке мы изучим loopIn и loopOut, луп свойства Path, loopIn и loopOut вместе, луп композиции через time-remap, луп фона, бесконечное движение фона.
Файл проекта вы можете скачать в группе ВК, в этом посте: https://vk.com/creativetuts?w=wall-72222266_237%2Fall
P.S. подписывайся на группу, там много интересного
Таймкоды (Timecodes):
00:00 – loopOut, cycle
04:51 – loopIn
06:05 – pingpong
08:24 – continue
09:45 – offset
10:58 – continue vs offset
12:24 – Второй аргумент экспрешена лупа (Second argument of loop expression)
14:51 – loopOutDuration, loopInDuration
15:44 – loopOut и loopIn вместе (loopOut & loopIn together)
20:29 – Луп свойства Path (Looping path)
22:42 – Луп композиции (Looping composition)
24:52 – Бесконечное движение фона (Loop Background)
Виды
• loopOut();
• loopIn();
• loopOutDuration();
• loopInDuration();
loopOut(); – Цикл начинается после последнего ключевого кадра и заканчивается на конце слоя.
loopIn(); – Цикл начинается на начале слоя и заканчивается на последнем ключевом кадре.
Аргументы
loopIn(type="cycle", numKeyframes=0)
1-ый аргумент – тип цикла.
2-ой аргумент – количество кадров которое будет использоваться для зацикленной анимации.
loopOutDuration и loopInDuration
Второй аргумент – это длительность которую нужно брать для цикла, в секундах.
Типы
Cycles – Луп по умолчанию. После последнего ключевого кадра, анимация начинается заново от первого ключевого кадра до последнего, и так до конца слоя.
Pingpong – Луп, в котором анимация идет от первого ключа до последнего, затем обратно от последнего до первого, а потом снова от первого до последнего.
Offset – Cоздаются циклы и каждый последующий цикл смещается на разницу значения свойства между вторым и первым ключевыми кадрами.
Continue – Данный аргумент не создает новых циклов. Он вычисляет с какой скоростью и в каком направлении слой подходит ко второму ключевому кадру, а затем с той же скоростью и в том же направлении продолжает двигаться.
Зацикленный Path
valueAtTime(time%key(numKeys).time)
Другой пример:
try{
timeStart = thisProperty.key(1).time; // начало - первый кифрэйм
duration = thisProperty.key(thisProperty.numKeys).time-timeStart; //вычисляем длительность
pingPong = true; //если пингпонг не нужен то false
quant=Math.floor((time-timeStart)/duration); //считаем номер цикла
if(quant<0) quant = 0 //не допускаем отрицательных номеров
if(quant%2 == 1 && pingPong == true){ //если цикл нечетный и пингпонг включен
t = 2timeStart+ (quant+1)duration - time; //предлагаю самим понять почему так
}
else{ //работает если пингпонг выключен или если цикл нечетный
t = time-quant*duration;
}
}
catch(err){
t = time;
}
thisProperty.valueAtTime(t)
Источник: https://aexpressions.ru/expressions/loop/loopout-path-ping-pong/
LoopIn & loopOut вместе
if (time < key(1).time) {
loopIn("cycle");
} else {
loopOut("cycle");
}
Другой пример:
loopIn("cycle") + loopOut("cycle") - value
Если мы хотим использовать пинг-понг:
loopIn("pingpong") + loopOut("pingpong")
- value
Луп с одинаковым первым и последним состоянием
Используем луп типа Cycle, но только убеждаемся в том, чтобы первый и последнее состояние объекта были одинаковыми.
Луп композиции с Time-Remap
Используем луп типа Cycle, но только убеждаемся в том, чтобы первый и последний кадр пре-композа были одинаковыми.
Луп фона
Используем эффект Offset