Руководство пользователя Отмена

Синтаксические различия между движками выражений

  1. Руководство пользователя After Effects
  2. Выпуски бета-версии
    1. Обзор программы бета-тестирования
    2. Домашняя страница бета-версии After Effects
  3. Начало работы
    1. Начало работы с After Effects
    2. Новые возможности After Effects 
    3. Сведения о выпуске | After Effects
    4. Системные требования для After Effects
    5. Сочетания клавиш в After Effects
    6. Поддерживаемые форматы файлов | After Effects
    7. Рекомендации по аппаратному обеспечению
    8. After Effects для компьютеров с процессорами Apple
    9. Планирование и настройка
  4. Рабочие среды
    1. Общие элементы пользовательского интерфейса
    2. Знакомство с интерфейсом After Effects
    3. Рабочие процессы
    4. Рабочие среды, панели управления, программы просмотра
  5. Проекты и композиции
    1. Проекты
    2. Основы создания композиции
    3. Предварительная композиция, вложение и предварительный рендеринг
    4. Просмотр подробных сведений о производительности с помощью инструмента «Профайлер композиций»
    5. Модуль рендеринга композиций CINEMA 4D
  6. Импорт видеоряда
    1. Подготовка и импорт неподвижных изображений
    2. Импорт из After Effects и Adobe Premiere Pro
    3. Импорт и интерпретация видео и аудио
    4. Подготовка и импорт файлов 3D-изображений
    5. Импорт и интерпретация элементов видеоряда
    6. Работа с элементами видеоряда
    7. Определение точек редактирования с помощью функции «Определение изменения сцен»
    8. Метаданные XMP
  7. Текст и графические элементы
    1. Текст
      1. Форматирование символов и панель символов
      2. Эффекты текста
      3. Создание и редактирование текстовых слоев
      4. Форматирование абзацев и панель «Абзац»
      5. Экструзия слоев текста и слоев-фигур
      6. Анимация текста
      7. Примеры и ресурсы для текстовой анимации
      8. Шаблоны динамического текста
    2. Анимационный дизайн
      1. Работа с шаблонами анимационного дизайна в After Effects
      2. Использование выражений для создания раскрывающихся списков в шаблонах анимационного дизайна
      3. Работа с основными свойствами для создания шаблонов анимационного дизайна
      4. Замена изображений и видео в шаблонах анимационного дизайна и основных свойствах
      5. Быстрая и простая анимация с помощью панели «Свойства»
  8. Рисование, заливка цветом и контуры
    1. Обзор слоев-фигур, контуров и векторных изображений
    2. Инструменты рисования: «Кисть», «Штамп» и «Ластик»
    3. Сглаживание обводки фигуры
    4. Атрибуты фигур, операции заливки цветом и операции с контурами для слоев-фигур
    5. Использование эффекта фигуры «Cмещение контура» для изменения фигур
    6. Создание фигур
    7. Создание масок
    8. Удаление объектов из видеоматериалов с помощью панели «Заливка с учетом содержимого»
    9. Инструменты «Кисть для ротоскопии» и «Уточнить подложку»
  9. Слои, маркеры и камера
    1. Выделение и упорядочивание слоев
    2. Режимы наложения и стили слоев
    3. 3D-слои
    4. Свойства слоя
    5. Создание слоев
    6. Управление слоями
    7. Маркеры слоя и маркеры композиции
    8. Камеры, освещение и точки обзора
  10. Анимация, ключевые кадры, отслеживание движения и прозрачное наложение
    1. Анимация
      1. Основы анимации
      2. Анимация с помощью инструментов «Марионетка»
      3. Управление и анимация контуров фигур и масок
      4. Анимация фигур Sketch и Capture с помощью After Effects
      5. Инструменты анимации
      6. Работа с анимацией на основе данных
    2. Ключевой кадр
      1. Интерполяция ключевого кадра
      2. Установка, выбор и удаление ключевых кадров
      3. Редактирование, перемещение и копирование ключевых кадров
    3. Отслеживание движения
      1. Отслеживание и стабилизация движения
      2. Отслеживание лиц
      3. Отслеживание маски
      4. Ссылка на маску
      5. Скорость
      6. Растягивание по времени и перераспределение времени
      7. Тайм-код и единицы отображения времени
    4. Прозрачное наложение
      1. Прозрачное наложение
      2. Эффекты прозрачного наложения
  11. Прозрачность и композиция
    1. Обзор композиции и прозрачности и соответствующие ресурсы
    2. Альфа-каналы и маски
    3. Подложки дорожек и перемещающиеся подложки
  12. Корректирование цвета
    1. Основы работы с цветом
    2. Управление цветом
    3. Эффекты цветокоррекции
    4. Управление цветом OpenColorIO и ACES
  13. Эффекты и стили анимации
    1. Обзор эффектов и стилей анимации
    2. Список эффектов
    3. Диспетчер эффектов
    4. Эффекты имитации
    5. Эффекты стилизации
    6. Аудиоэффекты
    7. Эффекты искажения
    8. Эффекты перспективы
    9. Эффекты канала
    10. Эффекты создания
    11. Эффекты времени
    12. Эффекты перехода
    13. Эффект «Устранение эффекта плавающего затвора»
    14. Эффекты «Размытие» и «Резкость»
    15. Эффекты 3D-канала
    16. Программные эффекты
    17. Эффекты подложки
    18. Эффекты «Шум» и «Зернистость»
    19. Эффект «Увеличение с сохранением уровня детализации»
    20. Устаревшие эффекты
  14. Выражения и автоматизация
    1. Выражения
      1. Основы работы с выражениями
      2. Понимание языка выражений
      3. Использование элементов управления выражениями
      4. Различия в синтаксисе между движками выражений JavaScript и Legacy ExtendScript
      5. Управление выражениями
      6. Ошибки выражения
      7. Использование редактора выражений
      8. Использование выражений для изменения свойств текста и доступа к ним
      9. Справочник языка выражений
      10. Примеры выражений
    2. Автоматизация
      1. Автоматизация
      2. Сценарии
  15. Видео с погружением, VR и 3D
    1. Создание сред VR в After Effects
    2. Применение видеоэффектов с эффектом погружения
    3. Инструменты составления композиций для видеоизображений VR/360
    4. Модуль рендеринга Advanced 3D
    5. Импорт и добавление 3D-моделей в композицию
    6. Импорт 3D-моделей из Creative Cloud Libraries
    7. Освещение на основе изображения
    8. Извлечение и анимация источников света и камер из 3D-моделей
    9. Отслеживание движений камеры в трехмерном пространстве
    10. Отбрасывание и принятие теней
    11. Встроенные анимации 3D-моделей
    12. Ограничитель тени
    13. Извлечение 3D-данных о глубине
    14. Изменение свойств материалов 3D-слоя
    15. Пространство для работы с трехмерными объектами
    16. Инструменты 3D-преобразования
    17. Дополнительные возможности 3D-анимации
    18. Предварительный просмотр изменений в 3D-дизайнах в режиме реального времени с помощью модуля Mercury 3D
    19. Добавление гибкого дизайна в графику 
  16. Виды и предварительный просмотр
    1. Предпросмотр
    2. Предпросмотр видео с помощью Mercury Transmit
    3. Изменение и использование представлений
  17. Рендеринг и экспорт
    1. Основы рендеринга и экспорта
    2. Кодирование H.264 в After Effects
    3. Экспорт проекта After Effects как проекта Adobe Premiere Pro
    4. Преобразование фильмов
    5. Многокадровый рендеринг
    6. Автоматический рендеринг и рендеринг по сети
    7. Рендеринг и экспорт неподвижных изображений и наборов неподвижных изображений
    8. Использование кодека GoPro CineForm в After Effects
  18. Работа с другими приложениями
    1. Dynamic Link и After Effects
    2. Работа с After Effects и другими приложениями
      1. Экспорт проекта After Effects как проекта Premiere Pro
    3. Синхронизация настроек в After Effects
    4. Библиотеки Creative Cloud Libraries в After Effects
    5. Подключаемые модули
    6. Cinema 4D и Cineware
  19. Совместная работа: Frame.io и Team Projects
    1. Совместная работа в Premiere Pro и After Effects
    2. Frame.io
      1. Установка и активация Frame.io
      2. Использование Frame.io с Premiere Pro и After Effects
      3. Часто задаваемые вопросы
    3. Team Projects
      1. Начало работы с Team Projects
      2. Создание Team Project
      3. Совместная работа с помощью Team Projects
  20. Память, хранилище, производительность
    1. Память и хранилище
    2. Как After Effects справляется с проблемами нехватки памяти при предварительном просмотре    
    3. Повышение производительности
    4. Установки
    5. Требования к графическому процессору и драйверу графического процессора для After Effects
  21. База знаний
    1. Выявленные неполадки
    2. Исправленные ошибки
    3. Часто задаваемые вопросы
    4. After Effects и macOS Ventura
    5. Как After Effects справляется с проблемами нехватки памяти при предварительном просмотре

В этом документе объясняются различия в синтаксисе языка выражений между движками выражений JavaScript и Legacy ExtendScript в After Effects 16.0.

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

Язык выражений в After Effects основан на JavaScript, который представляет собой реализацию ECMAScript. Движок выражений JavaScript в After Effects 16.0 основан на ECMAScript 2018. Движок выражений Legacy ExtendScript основан на ECMAScript 3 (1999). (Adobe ExtendScript — это также язык, который используется для создания сценариев в After Effects и других приложениях Adobe.)

Вы можете следовать приведенным ниже примерам, а также рекомендациям по созданию выражений, которые работают в обоих движках выражений JavaScript и Legacy ExtendScript.

Основные различия между движками выражений JavaScript и Legacy ExtendScript:

Современный синтаксис JavaScript: улучшения, внесенные в язык выражений

В выражениях можно использовать синтаксис JavaScript из ECMAScript 2018

С момента выхода ECMAScript 3 в язык JavaScript было внесено много дополнений. Появились новые, более компактные и удобочитаемые методы для использования со строками, массивами и объектами. Также появились новые способы объявления переменных и функций, а также параметров по умолчанию, операторов spread и многого другого. Этот документ не охватывает такие изменения, так как это общие изменения языка JavaScript. Ресурсы для изучения многих синтаксических дополнений можно найти по следующим ссылкам:

Дополнительные рекомендуемые, углубленные ресурсы для изучения JavaScript:

Выражение .значение больше не требуется при ссылке на другие свойства из исходного текста

Для ссылки на другое значение свойства из свойства исходного текста, движок Legacy ExtendScript требует добавить выражение .значение в конце данного свойства. По умолчанию движок выражений JavaScript показывает значение свойства, если только не был явно использован еще один атрибут, такой как .propertyIndex или .name.

Например:

thisComp.layer("Solid 1").transform.position
 
// В устаревшем движке вычисляется как значение «[object Property]» при применении к свойству «Исходный текст».
// В движке JavaScript вычисляется как значение свойства «Положение» слоя «Solid 1» при применении к свойству «Исходный текст».

Заморозка значений свойств с помощью posterizeTime(0)

В After Effects 16.0 выражение posterizeTime(0) замораживает значение свойства в композиции в момент времени 0. Это относится к обоим движкам выражений JavaScript и Legacy ExtendScript.

Примечание.

Этот подход не является обратно совместимым и может привести к неожиданным результатам в версиях After Effects до 16.0.

Несовместимый устаревший синтаксис

Почти весь синтаксис выражений для движка выражений Legacy ExtendScript совместим с движком выражений JavaScript. Однако есть устаревший синтаксис, который несовместим с движком выражений JavaScript. Иногда это вызвано изменениями синтаксиса в современном варианте JavaScript. В других случаях устаревший синтаксис был удален. Ниже приведены примеры нерабочего и рабочего синтаксисов.

Большую часть этих различий в синтаксисе можно исправить, создавая сценарии приложений, которые переписывают выражения.

Отличается синтаксис if...else

В общем случае рекомендуется всегда писать операторы if...else с разрывами строк и скобками в соответствии с рекомендациями MDN. Движок Legacy ExtendScript был терпим к свободному синтаксису в операторах if...else, однако движок JavaScript требует строгого соблюдения синтаксиса. При использовании движка JavaScript выражения if...else с неверным синтаксисом не обрабатываются.

Не допускается завершать условный оператор без оператора else.

Если выражение завершается оператором if без оператора else, движок JavaScript не обрабатывает такое выражение, выдавая сообщение об ошибке «В выражении используется неопределенное значение (возможно, оно является подписью массива вне диапазона)». Движок Legacy ExtendScript вычисляет следующее выражение равным 100, если параметр time больше 1 секунды. В противном случае оно вычисляется равным 50:

var x = 50;
if ( time > 1 ) {
    x = 100
}
// Здесь «else» подразумевается, но не указывается.

Для движка JavaScript необходимо явно указать, является ли часть else утверждения последним утверждением в выражении:

var x = 50;
if ( time > 1 ) {
    x = 100;
} else {
    x;
}

Это выражение правильно обрабатывается и движком JavaScript, и движком Legacy ExtendScript.

if и else не могут находиться в одной строке без скобок

Оператор if...else в одной строке без скобок вычисляется движком Legacy ExtendScript, но движок JavaScript выдает сообщение об ошибке, такое как «Ошибка синтаксиса: неожиданный токен else» или «В выражении используется неопределенное значение (возможно, оно является подписью массива вне диапазона)». Сообщение об ошибке зависит контекста и типа свойства.

Движок Legacy ExtendScript вычисляет следующее выражение равным 100, если параметр time больше 1 секунды. В противном случае оно вычисляется равным 50:

if ( time > 1 ) 100 else 50;

В операторах if...else необходимо использовать разрывы строк и скобки, чтобы они обрабатывались движком JavaScript. Для простых случаев вместо этого можно использовать трехместный оператор. С движком JavaScript можно использовать любой вариант следующего синтаксиса:

// Решение A: добавление разрыва строки перед «else» позволит обоим движкам выполнить оценку правильно.
 
if ( time > 1 ) 100
else 50;

// Решение Б: добавление правильных скобок также позволяет обоим движкам выполнить оценку правильно.

if ( time > 1 ) { 100 } else { 50 };
 
Решение В: используйте условный оператор вместо выражения if... else, что тоже обеспечивает правильность оценки обоими движками.
 
time > 1 ? 100 : 50;

Все указанные выше решения правильно обрабатывается и движком JavaScript, и движком Legacy ExtendScript.

Выражения не могут заканчиваться объявлением функции

Если выражение заканчивается объявлением функции, движок JavaScript не вычисляет такое выражение, а выдает сообщение об ошибке «Вместо объекта типа «Число», «Массив» или «Свойство» обнаружен объект другого типа». В случае движка JavaScript последний вычисляемый элемент должен возвращать значение, а не объявлять его.

Следующий пример работает для движка Legacy, но не для движка JavaScript:

timesTen( value ); // Устаревший движок оценивает эту строку даже в случае объявления функции ниже.
 
function timesTen ( val ) {
    return val * 10
}

Если в последней строке вызывается функция (вместо объявления), такое выражение правильно оценивается обоими движками:

function timesTen ( val ) {
    return val * 10
}

timesTen( value ); // Для возврата правильного значения движок JavaScript требует, чтобы вызов функции происходил после ее объявления.

Сокращенный синтаксис this() не допускается, вместо него используйте thisLayer()

В движке Legacy ExtendScript было разрешено использовать this в качестве сокращения thisLayer. В движке JavaScript форма this ссылается на глобальный объект и вместо нее необходимо использовать thisLayer. Использование this в движке JavaScript обычно приводит к сообщению об ошибке «это не функция».

В следующем примере для движка Legacy ExtendScript формат this используется для создания сокращенной ссылки на свойство «Положение текстового слоя» из свойства «Исходный текст»:

this(5)(2).value;

В движке JavaScript this необходимо заменить на thisLayer:

thisLayer(5)(2).value;

Использование thisLayer совместимо с обоими движками выражений.

Свойству исходного текста для доступа к символам из индекса-массива требуется выражение .значение

В случае движка выражений Legacy ExtendScript для доступа к символам текстового свойства можно использовать скобки, как для массива:

text.sourceText[0] // Возвращает первый символ текстового значения свойства «Исходный текст».

В случае движка JavaScript для доступа к символам необходимо добавить выражение .value:

text.sourceText.value[0] // Возвращает первый символ текстового значения свойства «Исходный текст».

Этот синтаксис совместим с обоими движками.

Свойства и методы Snake case не допускаются

Устаревшие свойства и методы Snake Case (запись с подчеркиванием вместо camelCase) не поддерживаются механизмом JavaScript. Вместо них следует использовать версии camelCase поскольку они совместимы с обоими движками. Ниже приведен список устаревших выражений Snake Case и соответствующие им выражения camelCase.

Свойства Snake Case

Свойства camelCase

Методы Snake Case

Методы camelCase

this_comp

this_layer

this_property

color_depth

has_parent

in_point

out_point

start_time

has_video

has_audio

audio_active

anchor_point

audio_levels

time_remap

casts_shadows

light_transmission

accepts_shadows

accepts_lights

frame_duration

shutter_angle

shutter_phase

num_layers

pixel_aspect

point_of_interest

depth_of_field

focus_distance

blur_level

cone_angle

cone_feather

shadow_darkness

shadow_diffusion

active_camera

thisComp

thisLayer

thisProperty

colorDepth

hasParent

inPoint

outPoint

startTime

hasVideo

hasAudio

audioActive

anchorPoint

audioLevels

timeRemap

castsShadows

lightTransmission

acceptsShadows

acceptsLights

frameDuration

shutterAngle

shutterPhase

numLayers

pixelAspect

pointOfInterest

depthOfField

focusDistance

blurLevel

coneAngle

coneFeather

shadowDarkness

shadowDiffusion

activeCamera

value_at_time()

velocity_at_time()

speed_at_time()

nearest_key()

posterize_time()

look_at()

seed_random()

gauss_random()

ease_in()

ease_out()

rgb_to_hsl()

hsl_to_rgb()

degrees_to_radians()

radians_to_degrees()

from_comp_to_surface()

to_comp_vec()

from_comp_vec()

to_world_vec()

from_world_vec()

to_comp()

from_comp()

to_world()

from_world()

temporal_wiggle()

loop_in_duration()

loop_out_duration()

loop_in()

loop_out()

valueAtTime()

velocityAtTime()

speedAtTime()

nearestKey()

posterizeTime()

lookAt()

seedRandom()

gaussRandom()

easeIn()

easeOut()

rgbToHsl()

hslToRgb()

degreesToRadians()

radiansToDegrees()

fromCompToSurface()

toCompVec()

fromCompVec()

toWorldVec()

fromWorldVec()

toComp()

fromComp()

toWorld()

fromWorld()

temporalWiggle()

loopInDuration()

loopOutDuration()

loopIn()

loopOut()

Использование eval() с выражениями в двоичной кодировке (.jsxbin)

Выражения, закодированные в двоичном формате ExtendScript (сохраненные как двоичный файл .jsxbin из ExtendScript ToolKit CC), не поддерживаются движком JavaScript.

Чтобы запутать выражение, используйте движок Legacy ExtendScript или другой метод запутывания, совместимый с ECMAScript 2018. Некоторые методы запутывания могут не поддерживаться обоими движками выражений.

Ограниченная поддержка объекта $. (доллар)

Для объекта $. (доллар) методы и свойства характерны для ExtendScript и в основном не поддерживаются движком JavaScript. В этой таблице перечислены неподдерживаемые и поддерживаемые виды использования объекта $. (доллар):

Не поддерживается $.

Поддерживаемые объекты $.

$.fileName

$.hiResTimes

$.stack

$.evalFile()

$.list()

$.setenv()

$.getenv()

$.appEncoding

$.buildDate

$.decimalPoint

$.dictionary

$.error

$.flags

$.includePath

$.level

$.line

$.locale

$.localize

$.memCache

$.os

$.screens

$.strict

$.version

$.build

$.engineName (не поддерживается движком Legacy ExtendScript)

$.global

Не поддерживаются выражения ...reflect.properties, ...reflect.methods и toSource()

Выражения reflect.properties и reflect.methods не поддерживаются движком JavaScript. Эти методы характерны для ExtendScript и у них нет прямого эквивалента в JavaScript.

Метод toSource() в JavaScript устарел и не является частью какого-либо стандарта.

Чтобы просмотреть список доступных свойств и методов для любого заданного свойства After Effects, аналогичного тому, которое было предоставлено вышеупомянутыми методами, используйте следующее выражение для свойства «Исходный текст» и свяжите его с нужным свойством, например, используя инструмент «Лассо» вместо thisProperty в строке 1:

let obj = thisProperty; // Замените «thisProperty» ссылкой на необходимое свойство.
пусть реквизит = [];
 
do {
    Object.getOwnPropertyNames(obj).forEach(prop => {
        if (props.indexOf(prop) === -1) {
            props.push(prop);
        }
    });
} while (obj = Object.getPrototypeOf(obj));
 
props.join("\n");        // Возвращает массив строк со списком доступных свойств и методов.

Приведенное выше выражение не совместимо с движком Legacy ExtendScript. В нем используются синтаксис и методы, недоступные в ECMAScript 3.

Требования к синтаксису для библиотек выражений .jsx и метода eval() с движком JavaScript

Когда выражения используются внутри библиотеки выражений .jsx или выражение вызывается внутри метода eval(), необходимо изменить определенный синтаксис:

Явный префикс thisLayer. или thisProperty. должен быть добавлен к любому собственному методу или атрибуту, который явно не вызывается для слоя или свойства. Такой префикс сообщает движку JavaScript, для какого объекта вызывается метод или атрибут.

Математические операции со значениями массива, такие как Position, необходимо вычислять, используя векторные математические функции или циклические функции, чтобы действовать на каждый элемент массива. Перегруженные математические операторы, такие как position + [100,100], не будут обрабатываться.

При использовании движка JavaScript выражения предварительно обрабатываются перед вычислением, чтобы сделать некоторые выражения с синтаксисом для Legacy ExtendScript читаемыми новым движком. Однако такие задачи предварительной обработки не выполняются при вычислении выражений из библиотеки функций выражений .jsx или вызове выражений внутри метода eval(). Указанные выше изменения синтаксиса в таких случаях необходимо вносить вручную. Все эти изменения синтаксиса обратно совместимы с устаревшим движком ExtendScript, поэтому выражение .jsx записанное так, чтобы работать с движком JavaScript, также будет работать с движком Legacy ExtendScript.

Совет по производительности: из-за отсутствия предварительной обработки в случае вызова сложных выражений из библиотеки .jsx с таким синтаксисом и движком JavaScript возможно повышение производительности по сравнению с вызовом такого же выражения непосредственно в свойстве.

Собственные методы с явным префиксом и атрибуты с thisLayer. или thisProperty.

В таблице ниже перечислены методы и атрибуты, для которых требуется префикс. Например, атрибут time необходимо записать в форме thisLayer.time, тогда как метод wiggle() — в форме thisProperty.wiggle()

Эти префиксы требуются, только если атрибут или метод не вызываются явно в другом слое или свойстве. Например, при вызове thisComp.layer(1).hasParent, добавляется thisLayer. не требуется, так как .hasParent уже явно вызывается в layer(1).

Методы, требующие thisLayer.

Атрибуты, требующие thisLayer.

Методы, требующие thisProperty.

Атрибуты, требующие thisProperty.

comp()
footage()
posterizeTime()
add()
sub()
mul()
div()
clamp()
length()
dot()
normalize()
cross()
lookAt()
timeToFrames()
framesToTime()
timeToTimecode()
timeToFeetAndFrames()
timeToNTSCTimecode()
timeToCurrentFormat()
seedRandom()
random()
gaussRandom()
noise()
degreesToRadians()
radiansToDegrees()
linear()
ease()
easeIn()
easeOut()
rgbToHsl()
hslToRgb()
hexToRgb()
mask()
sourceRectAtTime()
sourceTime()
sampleImage()
toComp()
fromComp()
toWorld()
fromWorld()
toCompVec()
fromCompVec()
toWorldVec()
fromWorldVec()
fromCompToSurface()

time
source
thisProject
colorDepth
transform
anchorPoint
position
scale
rotation
opacity
orientation
rotationX
rotationY
rotationZ
lightTransmission
castsShadows
acceptsShadows
acceptsLights
ambient
diffuse
specular
specularIntensity
shininess
specularShininess
metal
audioLevels
timeRemap
marker
name
width
height
index
parent
hasParent
inPoint
outPoint
startTime
hasVideo
hasAudio
active
enabled
audioActive
cameraOption
pointOfInterest
zoom
depthOfField
focusDistance
aperature
blurLevel
irisShape
irisRotation
irisRoundness
irisAspectRatio
irisDiffractionFringe
highlightGain
highlightThreshold
highlightSaturation
lightOption
intensity
color
coneAngle
coneFeather
shadowDarkness
shadowDiffusion

valueAtTime()
velocityAtTime()
speedAtTime()
wiggle()
temporalWiggle()
smooth()
loopIn()
loopOut()
loopInDuration()
loopOutDuration()
key()
nearestKey()
propertyGroup()
points()
inTangents()
outTangents()
isClosed()
pointsOnPath()
tangentOnPath()
normalOnPath()
createPath()

velocity
speed
numKeys
propertyIndex

Замена математических операторов векторными математическими функциями

Оба движка JavaScript и LegacyExtendScript разрешают перегрузку математических операторов для массивов при использовании такого синтаксиса, как position + [100,100], однако это не работает для выражений из библиотеки функций выражений .jsx или внутри метода eval().

Чтобы применить математические функции к свойствам массива, таким как Position, Scale и т. д., для сложения, вычитания, умножения и деления следует использовать эквиваленты векторных математических функций. Векторные математические функции также будут работать для обычных чисел, поэтому функция, которая может быть вызвана для свойств данных любого типа, должна использовать векторные математические функции.

Примечание.

Префикс thisLayer. необходимо использовать с векторными математическими функциями.

  • Сложение: thisLayer.add(vec1, vec2)
  • Вычитание: thisLayer.sub(vec1, vec2)
  • Умножение: thisLayer.mul(vec, amount)
  • Деление: thisLayer.div(vec, amount)

Ниже приведены примеры выражений с использованием стандартных математических функций и обновленных векторных математических функций. В векторных математических выражениях также используется соответствующий префикс thisLayer. или thisProperty., когда необходимо.

Чтобы найти разницу между wiggle() и значением свойства «Положение»:

// Стандартная математика:
wiggle() - value;


// Векторная математика:
thisLayer.sub( thisProperty.wiggle(), value );

Для интерполяции между двумя значениями, подобно linear(), но с расширенным диапазоном за пределами заданного минимума и максимума:

// Стандартная математика:
value1 + ( ( t - tMin ) / ( tMax - tMin ) ) * ( value2 - value1 );
 
 
// Векторная математика:
thisLayer.add( value1, thisLayer.mul( thisLayer.div( thisLayer.sub( t, tMin ), thisLayer.sub( tMax, tMin ) ), thisLayer.sub( value2, value1 ) ) );

Циклический ввод и вывод свойства «Положение»:

// Стандартная математика:
loopIn( "cycle" ) + loopOut( "cycle" ) - value;
 
 
// Векторная математика:
thisLayer.sub( thisLayer.add( thisProperty.loopIn( "cycle" ), thisProperty.loopOut( "cycle" ) ), value );

Связанные материалы

 Adobe

Получайте помощь быстрее и проще

Новый пользователь?