Анимация — это значение во времени
Анимация выглядит сложной, пока не сказано главное. А главное умещается в одну строку: анимация — это значение, которое меняется во времени. Не эффект, не пресет, не «оживление» — значение и время.
Возьмём прямоугольник. У него есть положение по горизонтали — число: двадцать. Если в начале сцены это число равно двадцати, а через две секунды — двумстам двадцати, прямоугольник поедет вправо. Всё. Больше в этом движении ничего нет, и любая программа для анимации устроена вокруг этой мысли.
И обратное следствие, которое экономит годы: если у свойства нет числа, анимировать его нечем. Нельзя «плавно поменять шрифт» — между двумя шрифтами нет промежуточных значений. Можно поменять размер шрифта: он число.
Стоит сразу привыкнуть к этой проверке, потому что она отвечает на половину вопросов вида «а как сделать вот такое». Вопрос переформулируется в «какое здесь свойство и какое у него число» — и дальше либо число находится, и задача решается за минуту, либо не находится, и тогда задача решается совсем другим способом: не движением значения, а подменой одного слоя другим.
Второе, к чему стоит привыкнуть, — что программа хранит не движение, а два его края. Нигде внутри проекта нет записи «слой едет вправо». Есть «в нуле двадцать» и «на двух секундах двести двадцать», а всё, что видно между ними, программа считает заново каждый кадр. Это объясняет вещь, которая иначе выглядит волшебством: сдвиньте второй ключ по линейке — и движение само станет быстрее или медленнее, потому что края остались прежними, а времени между ними стало меньше или больше.
Ключ и секундомер
Чтобы записать «в этот момент вот такое значение», во всех программах служит одно и то же — ключ. Ключ хранит две вещи: момент времени и значение свойства в этот момент. И больше ничего.
Рисуется ключ ромбом на линейке времени — и в настоящей программе вы увидите тот же ромб на том же месте. Ставится он не кнопкой «анимировать», а секундомером у свойства: пока секундомер выключен, значение постоянно на всю сцену; включили — программа запоминает ключ там, где стоит курсор, и дальше каждое изменение значения ставит новый ключ.
| Что видно | Что это значит |
|---|---|
| у свойства нет ромбов | значение одно на всю сцену и не меняется |
| один ромб | значение записано, но меняться нечему — второго нет |
| два ромба | между ними идёт движение |
| ромб не там, где нужно | движение начнётся или кончится не вовремя |
Важно и то, что ключ принадлежит одному свойству, а не слою целиком. У положения свои ключи, у прозрачности свои, и стоять они могут в совершенно разных моментах: слой может начать двигаться на первой секунде, а исчезать — на третьей. Поэтому в панели свойств у каждой строки свой секундомер и своя линейка, а «анимировать слой» как единое действие в программах отсутствует.
Первое движение по шагам
Теперь соберём первое движение целиком. Порядок такой, и он одинаков везде:
Первое — поставить курсор в тот момент, с которого движение начинается. Второе — включить секундомер у нужного свойства: в этот момент запишется ключ с нынешним значением. Третье — передвинуть курсор туда, где движение должно закончиться. Четвёртое — изменить значение. Ключ поставится сам.
Стоит сказать и про то, чего в этом порядке нет. В нём нет шага «выбрать эффект» и нет шага «включить анимацию слоя»: ни того, ни другого в устройстве не существует. Пресеты и готовые эффекты, которые есть в любой программе, — это чужие наборы ключей, собранные заранее; они экономят минуты и ничего не меняют в том, как всё устроено. Разобрав такой пресет по ключам, вы увидите ровно то, что собрали сейчас руками, только ключей будет больше.
И последнее про этот урок. Всё, что дальше — плавность, пауза, перекрытие, ритм, — надстройки над этим устройством, а не отдельные темы. Поэтому если в каком-то месте курса станет непонятно, вернуться стоит именно сюда: почти всегда вопрос сводится к «какое свойство, в какой момент, какое значение».