Примеры использования expressions. Часы

Разберем пример использования expressions для «явной» анимации, то есть для установления прямой зависимости между атрибутом объекта и временем.

Изготовьте в новой сцене стрелку часов.

Расположите ее так, чтобы центр вращения находился в начале координат и вращение стрелки происходило вокруг оси Z.

Назовите стрелку sec, ибо она будет отсчитывать секунды.

Если это слишком сложно или скучно, откройте файл clock.та.

Выделите в Channel Box атрибут rotateZ и в контекстном меню выполните пункт Expressions. В появившемся окне Expression Editor введите простую формулу

rz = time*6; Нажмите кнопку Create.

Если в строке из десяти символов вы допустили ошибку, то кнопка Create не превратится в кнопку Edit, и вам придется хорошенько сосредоточиться, чтобы найти ошибку. В противном случае проиграйте анимацию и подумайте о сути формулы.

Переменная time содержит время в секундах для текущего кадра. Соответственно, через одну секунду после начала анимации (то есть в двадцать пятом кадре), значение time будет равно единице. За одну секунду секундная стрелка должна повернуться на шесть градусов (360 градусов разделить на 60 секунд равно 6). Поэтому, чтобы задать значение атрибута rotateZ в градусах, мы умножили время в секундах на 6.

Примечание. В данном случае имя объекта можно было не писать перед именем атрибута. Об этом я скажу чуть позже.

Очевидно, для того, чтобы стрелка поворачивалась в другую сторону, следует добавить знак минус. Кроме того, зададим «дискретное» вращение стрелки, чтобы она скачком поворачивалась в новое положение только в тех кадрах, где значение времени равно «целым» секундам. Очевидно для этого нужно взять целую часть числа, содержащего время в секундах, то есть целую часть переменной time.

Если вы закрыли Expression Editor, доберитесь до него снова, выделив rotateZ в Channel Box и вызвав пункт Expressions.

Примечание. Возможно, вы удивитесь, увидев, что ваша формула неузнаваемо изменилась. Если нет, нажмите кнопку Reload, и вы увидите, что МАУА автоматически преобразует короткие имена атрибутов в длинные и добавляет к ним имена соответствующих объектов. Для того, чтобы изменить такое поведение, необходимо исправить некоторое количество стандартных майских скриптов. Однако обсуждение этого процесса выходит за рамки данной главы.

Исправьте формулу следующим образом: sec. rotateZ = -int(time)*6; Нажмите кнопку Edit.

Теперь стрелка вращается ежесекундными рывками.

Установите диапазон анимации в 90 ООО кадров - ведь если 3600 секунд (то бишь 1 час) умножить на 25 кадров, это аккурат 90 000 кадров.

В настройках анимации задайте Playback Speed=Real-time(25 fps), чтобы наблюдать реальное время на экране.

Запустите анимацию, посидите, отдохните, подумайте о вечном, глядя на кончик секундной стрелки…

Вернитесь в нулевой кадр и скопируйте объект sec, изготовив таким образом минутную стрелку. Назовите ее min и немного подредактируйте ее позицию и форму.

Минутная стрелка должна вращаться в 60 раз медленнее секундной. Поэтому expression для вращения будет вызывающе прост.


⇐ вернуться назад | | далее ⇒