Guía del usuario Cancelar

Diferencias de sintaxis entre motores de expresiones

  1. Guía del usuario de After Effects
  2. Versiones beta
    1. Descripción general del programa beta
    2. Comunidad beta de After Effects
    3. Funciones de la versión beta
      1. Panel Propiedades (beta)
      2. Capas mate de pista de selección (Beta)
      3. Codificación H.264 nativa (Beta)
  3. Introducción
    1. Introducción a After Effects
    2. Novedades de After Effects 
    3. Notas de la versión | After Effects
    4. Requisitos del sistema para After Effects
    5. Métodos abreviados de teclado en After Effects
    6. Formatos de archivo admitidos | After Effects
    7. Recomendaciones de hardware
    8. After Effects para Apple Silicon
    9. Planificación y configuración
    10. Configuración e instalación
  4. Espacios de trabajo
    1. Elementos generales de la interfaz de usuario
    2. Familiarización con la interfaz de After Effects
    3. Flujos de trabajo
    4. Espacios de trabajo, paneles y visores
  5. Proyectos y composiciones
    1. Proyectos
    2. Conceptos básicos sobre composiciones
    3. Precomposición, anidamiento y preprocesamiento
    4. Ver información de rendimiento detallada con el Perfilador de composición
    5. Procesador de composición de Cinema 4D
  6. Importación de material de archivo
    1. Preparación e importación de imágenes fijas
    2. Importación desde After Effects y Adobe Premiere Pro
    3. Importación e interpretación de vídeo y de audio
    4. Preparación e importación de archivos de imagen 3D
    5. Importación e interpretación de elementos de material de archivo
    6. Uso de elementos de material de archivo
    7. Detección de puntos de edición con Detección de edición de escena
    8. Metadatos XMP
  7. Texto y gráficos
    1. Texto
      1. Formato de caracteres y el panel Carácter
      2. Efectos de texto
      3. Creación y edición de capas de texto
      4. Aplicación de formato a párrafos y el panel Párrafo
      5. Extrusión de capas de texto y formas
      6. Animación del texto
      7. Ejemplos y recursos para animación de texto
      8. Plantillas de texto interactivo
    2. Gráficos animados
      1. Trabajar con plantillas de gráficos animados en After Effects
      2. Uso de expresiones para crear listas desplegables en plantillas de gráficos animados
      3. Trabajo con propiedades esenciales para crear plantillas de gráficos animados
      4. Reemplazo de imágenes y vídeos en plantillas de gráficos animados y propiedades esenciales
  8. Dibujo, pintura y trazados
    1. Descripción general de las capas de forma, trazados y gráficos vectoriales
    2. Herramientas de pintura: Pincel, Tampón de clonar y Borrador
    3. Estrechar trazos de forma
    4. Atributos de forma, operaciones de pintura y operaciones de trazado para capas de forma
    5. Uso del efecto de forma Desplazar trazados para modificar formas
    6. Creación de formas
    7. Creación de máscaras
    8. Elimine objetos de sus vídeos desde el panel Relleno según el contenido
    9. Pincel tipo rotoscopia y Perfeccionar mate
  9. Capas, marcadores y cámara
    1. Selección y organización de capas
    2. Modos de fusión y estilos de capas
    3. Capas 3D
    4. Propiedades de capa
    5. Creación de capas
    6. Administración de capas
    7. Marcadores de capa y marcadores de composición
    8. Cámaras, luces y puntos de interés
  10. Animación, fotogramas clave, seguimiento del movimiento y efecto de clave
    1. Animación
      1. Conceptos básicos sobre animaciones
      2. Animación con herramientas de marioneta
      3. Administración y animación de trazados de formas y máscaras
      4. Animación de formas de Sketch y Capture con After Effects
      5. Herramientas de animación varias
      6. Trabajo con animación basada en datos
    2. Fotograma clave
      1. Interpolación de fotogramas clave
      2. Ajuste, selección y eliminación de fotogramas clave
      3. Edición, desplazamiento y copia de fotogramas clave
    3. Seguimiento de movimiento
      1. Seguimiento y estabilización del movimiento
      2. Seguimiento de caras
      3. Seguimiento de máscara
      4. Referencia de máscara
      5. Velocidad
      6. Ampliación del tiempo y reasignación del tiempo
      7. Unidades de visualización de tiempo y código de tiempo
    4. Incrustación
      1. Incrustación
      2. Efectos de incrustación
  11. Transparencia y composición
    1. Descripción general y recursos sobre composición y transparencia
    2. Canales alfa y mates
  12. Ajuste del color
    1. Conceptos básicos sobre colores
    2. Gestión de color
    3. Efectos de corrección de color
  13. Ajustes preestablecidos de animación y efectos
    1. Información general de efectos y ajustes preestablecidos de animación
    2. Lista de efectos
    3. Efectos de simulación
    4. Efectos de Estilizar
    5. Efectos de audio
    6. Efectos de distorsión
    7. Efectos de perspectiva
    8. Efectos de canal
    9. Efectos de generación
    10. Efectos de transición
    11. El efecto Reparación de obturación de desplazamiento
    12. Efectos Desenfocar y Enfocar
    13. Efectos de canal 3D
    14. Efectos de utilidad
    15. Efectos mate
    16. Efectos Ruido y Granulado
    17. Efecto Mejora de conservación de detalles
    18. Efectos obsoletos
  14. Expresiones y automatización
    1. Expresión
      1. Conceptos básicos sobre expresiones
      2. Comprensión del lenguaje de expresión
      3. Uso de los controles de expresión
      4. Diferencias de sintaxis entre los motores de expresiones de JavaScript y ExtendScript heredado
      5. Edición de expresiones
      6. Errores de expresiones
      7. Uso del editor de expresiones
      8. Uso de expresiones para editar y acceder a las propiedades de texto
      9. Referencia del lenguaje de expresión
      10. Ejemplos de expresiones
    2. Automatización
      1. Automatización
      2. Scripts
  15. Vídeo inmersivo, RV y 3D
    1. Construcción de entornos de RV en After Effects
    2. Aplicar efectos de vídeo envolvente
    3. Herramientas de composición para vídeos de VR/360
    4. Seguimiento del movimiento de la cámara 3D
    5. Trabajo en espacios de diseño 3D
    6. Herramientas de transformación Gizmo 3D
    7. Haga más cosas con la animación 3D
    8. Previsualización de los cambios en diseños 3D en tiempo real con el motor en tiempo real
    9. Adición de diseño interactivo a los gráficos 
  16. Vistas y previsualizaciones
    1. Previsualización
    2. Previsualización de vídeo con Mercury Transmit
    3. Modificación y utilización de vistas
  17. Procesamiento y exportación
    1. Principios básicos del procesamiento y la exportación
    2. Exportación de un proyecto de After Effects como un proyecto de Adobe Premiere Pro
    3. Conversión de películas
    4. Procesamiento de varios fotogramas
    5. Procesamiento automático y en red
    6. Procesamiento y exportación de imágenes fijas y secuencias de imágenes fijas
    7. Uso del códec de GoPro CineForm en After Effects
  18. Uso de otras aplicaciones
    1. Dynamic Link y After Effects
    2. Uso de After Effects y otras aplicaciones
    3. Sincronización de la configuración en After Effects
    4. Bibliotecas Creative Cloud en After Effects
    5. Plugins
    6. Cinema 4D y Cineware
  19. Colaboración: Frame.io y Team Projects
    1. Colaboración en Premiere Pro y After Effects
    2. Frame.io
      1. Instalar y activar Frame.io
      2. Utilizar Frame.io con Premiere Pro y After Effects
      3. Preguntas frecuentes
    3. Team Projects
      1. Introducción a Team Projects
      2. Creación de un proyecto de equipo
      3. Colaboración con Team Projects
  20. Memoria, almacenamiento y rendimiento
    1. Memoria y almacenamiento
    2. Cómo maneja After Effects los problemas de poca memoria durante la previsualización
    3. Mejora del rendimiento
    4. Preferencias
    5. Requisitos de la GPU y del controlador de la GPU para After Effects

En este documento se explican las diferencias de sintaxis del lenguaje de expresiones entre los motores de expresiones de JavaScript y ExtendScript heredado en After Effects 16.0.

Consulte este documento para obtener más información sobre cómo mejorar las expresiones del motor de expresiones de JavaScript, o bien para corregir los errores que se producen cuando las expresiones escritas para las versiones anteriores de After Effects no se evalúan en el motor de expresiones de JavaScript.

El lenguaje de expresión en After Effects se basa en JavaScript, que es una implementación de ECMAScript. El motor de expresiones de JavaScript en After Effects 16.0 se basa en ECMAScript 2018. El motor de expresiones de ExtendScript heredado se basa en ECMAScript 3 (1999). (Adobe ExtendScript es también el lenguaje utilizado para crear scripts en After Effects y en otras aplicaciones de Adobe).

Puede seguir los ejemplos que se ofrecen a continuación, así como las directrices para la creación de expresiones que funcionen en los motores de expresiones tanto de JavaScript como de ExtendScript heredado.

Las principales diferencias entre los motores de expresiones de JavaScript y ExtendScript heredado son las siguientes:

Sintaxis JavaScript moderna: se han realizado mejoras en el lenguaje de expresiones.

Las expresiones pueden utilizar la sintaxis JavaScript de ECMAScript 2018.

Se han agregado muchos elementos al lenguaje JavaScript desde ECMAScript 3. Hay nuevos métodos, más compactos y legibles, para utilizar con cadenas, matrices y objetos. También hay nuevas formas de declarar variables y funciones, así como parámetros predeterminados, operadores de propagación y mucho más. En este documento no se tratan dichos cambios, ya que son generales del lenguaje JavaScript. En los siguientes vínculos encontrará recursos para obtener más información sobre dichas adiciones a la sintaxis:

Recursos adicionales recomendados en los que se trata JavaScript en profundidad:

.value ya no es necesario al realizar una vinculación a otras propiedades desde Source Text.

Al hacer referencia a otro valor de propiedad desde una propiedad de Source Text, el motor de ExtendScript heredado requiere que se agregue .value al final de la propiedad. El motor de JavaScript muestra el valor de la propiedad de forma predeterminada, a no ser que se utilice explícitamente otro atributo como .propertyIndex o .name.

Por ejemplo:

thisCompayer (“Solid 1”)ransformosition
 
// En el motor heredado, se evalúa como “[propiedad de objeto]” cuando se aplica a una propiedad de origen de texto.
// En el motor de JavaScript, el resultado es el valor de la propiedad posición de la capa “Solid 1” cuando se aplica a una propiedad de texto de origen.

Es posible congelar valores de propiedades con posterizeTime(0).

En After Effects 16.0, posterizeTime(0) permite congelar el valor de propiedad en el momento 0 en la composición. Se aplica tanto al motor de JavaScript como al motor de ExtendScript heredado.

Nota:

Esta característica no es compatible con versiones anteriores y puede provocar resultados inesperados en las versiones de After Effects anteriores a la 16.0.

La sintaxis heredada no es compatible.

Casi toda la sintaxis de las expresiones del motor de expresiones de ExtendScript heredado es compatible con el motor de expresiones de JavaScript. Sin embargo, cierta sintaxis heredada no es compatible con el motor de expresiones de JavaScript. En ocasiones, esto se debe a los cambios de sintaxis en el JavaScript moderno. En otros casos, se han retirado algunos elementos obsoletos o anticuados de la sintaxis. A continuación se ofrecen algunos ejemplos de la sintaxis, tanto de los elementos que funcionan como de los que no.

La mayor parte de estas diferencias en la sintaxis se puede corregir mediante la creación de scripts de aplicación que reescriban las expresiones.

Diferencias en la sintaxis if...else

En general, se recomienda escribir siempre las declaraciones if...else con saltos de línea y corchetes de acuerdo con las directrices de MDN. El motor de ExtendScript heredado toleraba la sintaxis de las declaraciones if...else, pero el motor de JavaScript es muy estricto. La sintaxis if...else incorrecta no se evalúa al utilizar el motor de JavaScript.

No se permite terminar una expresión en una declaración if sin un elemento else.

Si una expresión termina con una declaración if sin una declaración else, el motor de JavaScript no evaluará la expresión y arrojará el código de error “Undefined value used in expression (could be an out of range array subscript?)” (Se ha utilizado un valor sin definir en la expresión. ¿Puede ser un subscript de matriz fuera del intervalo?). En el motor ExtendScript heredado, la siguiente expresión se evalúa como 100, si el tiempo es superior a 1 segundo; en caso contrario, se evalúa como 50:

var x = 50;
if ( time > 1) {
    x = 100
}
En este caso, el “else” es implícito, pero no se ha indicado.

El motor de JavaScript necesita que la parte else de la declaración se establezca de forma explícita si es la última declaración de la expresión:

var x = 50;
si ( time > 1) {
    x = 100;
} o{
    x;
}

Este uso se evalúa correctamente tanto en el motor de JavaScript como en el motor de ExtendScript heredado.

Los elementos if y else no pueden estar en la misma línea sin corchetes.

Una declaración·if...else¬en·una·sola·línea·sin·corchetes·se·evalúa·en·el·motor·de·ExtendScript·heredado,·pero·no·lo·hace·en·el·motor·de·JavaScript,·donde·arroja·un·error·similar·a·“Syntax·Error:·Unexpected·token·else”·(Error·de·sintaxis:·token·else·inesperado)·o·“Undefined·value·used·in·expression·(could·be·an·out·of·range·array·subscript?)”·(Se ha utilizado un valor sin definir en la expresión. ¿Puede ser un subscript de matriz fuera del intervalo?). El error varía en función del contexto y el tipo de propiedad.

En el motor ExtendScript heredado, la siguiente expresión se evalúa como 100, si el tiempo es superior a 1 segundo; en caso contrario, se evalúa como 50:

si ( time > 1) 100 o 50;

El motor de JavaScript requiere saltos de línea o corchetes para evaluar las declaraciones if...else. Para casos sencillos, se puede utilizar el operador ternario. Con el motor de JavaScript se puede utilizar cualquiera de las siguientes sintaxis:

// Solución A: al añadir un salto de línea antes de “o”, los dos motores se evalúan correctamente.
 
si (time > 1) 100
o 50;
 
// Solución B: agregar paréntesis de corrección también permitirá evaluar correctamente a ambos motores.
 
si ( time > 1) { 100 } o { 50 };
 
;
 
// Solución C: utilice un operador ternario en lugar del si...o, que también se evalúa correctamente en ambos motores.
 
time > 1 ? 100 : 50;

Todas las soluciones anteriores se evalúan correctamente tanto en el motor de JavaScript como en el motor de ExtendScript heredado.

Las expresiones no pueden terminar en una declaración de función.

Si una expresión termina con una declaración de función, el motor de JavaScript no evalúa la expresión y arroja el error “Object of type found where a Number, Array, or Property is needed” (Se ha encontrado un objeto de tipo, pero se necesitaba un número, una matriz o una propiedad). En el motor de JavaScript, el último elemento evaluado debe devolver un valor, en lugar de declararlo.

El ejemplo siguiente funciona en el motor heredado, pero no en el de JavaScript:

timesTen ( valor ); // El motor heredado evalúa esta línea, aunque la función se haya declarado a continuación.
 
función timesTen (val) {
    devolver val * 10
}

Si en la última línea se llama a una función (y no a una declaración), la expresión se evalúa correctamente en ambos motores:

función timesTen ( val ) {
    devolver val * 10
}
 
timesTen (valor);  // El motor de JavaScript necesita que la llamada de la función se produzca debajo de la declaración para devolver el valor correcto.

No se admite la sintaxis abreviada this(); debe utilizarse thisLayer().

En el motor de ExtendScript heredado, this se permitía siempre como abreviatura de thisLayer.En el motor de JavaScript, this se refiere al objeto global y debe utilizarse thisLayer. Utilizar this en el motor de JavaScript suele tener como resultado el error “this is not a function” (Este elemento no es una función).

En el ejemplo de ExtendScript heredado siguiente, this se utiliza para crear un vínculo compacto con una propiedad Text Layer Position desde la propiedad Source Text:

Este(5)(2).valor;

En el motor de JavaScript, this debe sustituirse por thisLayer:

thisLayer(5)(2).valor;

El uso de thisLayer es compatible con ambos motores de expresiones.

El acceso del índice de matriz de la propiedad Source Text a los caracteres requiere .value.

En el motor de expresiones de ExtendScript heredado, es posible acceder a los caracteres de una propiedad de texto mediante una notación de corchetes como una matriz:

Text.sourceText [0] // Devuelve el primer carácter del valor de texto de la propiedad de texto de origen.

En el motor de JavaScript, debe agregarse .value para acceder a los caracteres:

Text. sourceText. Value [0] // Devuelve el primer carácter del valor de texto de la propiedad del texto de origen.

Esta sintaxis es compatible con ambos motores.

No se permiten las propiedades ni los métodos en formato Snake_case.

El motor de JavaScript no admite las propiedades y los métodos Snake_case obsoletos (escritos con un guion bajo y no en formato camelCase). Deben utilizarse las versiones en formato camelCase, pues estas son compatibles con ambos motores. A continuación se ofrece una lista de propiedades Snake_case obsoletas y su equivalente en camelCase.

Propiedades Snake_case

Propiedades camelCase

Métodos Snake_case

Métodos 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()

Se permite el uso de eval() con expresiones con codificación binaria (.jsxbin).

El motor de JavaScript no admite las expresiones codificadas en el formato binario de ExtendScript (guardadas como un archivo binario .jsxbin desde ExtendScript ToolKit CC).

Si desea ofuscar una expresión, utilice el motor de ExtendScript heredado o use un método de ofuscación diferente que sea compatible con ECMAScript 2018. Algunos métodos de ofuscación pueden no ser compatibles con ambos motores de expresión.

La compatibilidad es limitada para el objeto $. (dólar).

Los métodos y las propiedades del objeto $. (dólar) son específicos de ExtendScript, y el motor de JavaScript no los admite en su mayoría. En esta tabla se muestran los usos compatibles y no compatibles del objeto $. (dólar):

$. no compatible

$. compatible

$.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 (no compatible en el motor ExtendScript heredado)

$.global

No se admiten los elementos ...reflect.properties, ...reflect.methods ni toSource().

reflect.properties y reflect.methods no son compatibles con el motor de JavaScript. Se trata de métodos específicos de ExtendScript que no tienen equivalente directo en JavaScript.

toSource() se considera obsoleto en JavaScript y no es parte de ninguna pista estándar.

Para ver una lista de las propiedades y los métodos disponibles para cualquier propiedad de After Effects, como se ha hecho con los métodos anteriores, utilice la siguiente expresión en una propiedad Source Text y vincúlela a la propiedad de destino deseada. Por ejemplo, se puede utilizar el icono espiral en lugar de thisProperty en la línea 1:

let obj = thisProperty; // Reemplace “thisProperty” por un vínculo de propiedad con la propiedad deseada.
let props = [
 
do {
    ObjectetOwnPropertyNames(obj)orEach(prop => {
        if (propsndexOf(prop) === -1) {
            propsush(prop
        }
    }
} while (obj = ObjectetPrototypeOf(obj)
 
propsoin(“\n”           // Devuelve un conjunto de cadenas que enumera las propiedades y los métodos disponibles.

La expresión anterior no es compatible con el motor de ExtendScript heredado. Utiliza sintaxis y métodos no disponibles en ECMAScript 3.

Requisitos de sintaxis para las bibliotecas de expresiones .jsx y eval() con el motor de JavaScript

Cuando se utilizan expresiones dentro de una biblioteca de funciones de expresiones .jsx, o cuando se llama a una expresión dentro de eval(), es preciso modificar ciertos elementos de la sintaxis:

Es preciso agregar un prefijo explícito thisLayer. o thisProperty. a cualquier método o atributo nativo al que no se llame explícitamente en una capa o propiedad. El prefijo indica al motor de JavaScript el objeto para el que se llama al método o atributo.

Las operaciones matemáticas realizadas sobre valores de matriz como Position deben calcularse utilizando la matemática vectorial, o bien funciones de bucle o iteración que actúen sobre todos los elementos de la matriz. Los operadores matemáticos sobrecargados, como position + [100,100], no se evaluarán.

Si se utiliza el motor de JavaScript, las expresiones de ExtendScript heredado se preprocesan antes de su evaluación para que la sintaxis de algunas de ellas sea legible para el nuevo motor. Sin embargo, estas tareas de preprocesamiento no se realizan al evaluar expresiones de una biblioteca de funciones de expresiones .jsx, o al llamar a una expresión dentro de eval(). En estos casos, las modificaciones de sintaxis indicadas deben realizarse de forma manual. Todas estas modificaciones de sintaxis son retrocompatibles con el motor ExtendScript heredado, de modo que una biblioteca de expresiones .jsx escrita para que funcione con el motor de JavaScript también funcionará con el motor ExtendScript heredado.

Sugerencia de rendimiento: Debido a la falta de preprocesamiento, las llamadas a expresiones complejas desde una biblioteca .jsx con la sintaxis y el motor de JavaScript pueden tener mejor rendimiento que las llamadas a las mismas expresiones directamente desde una propiedad.

Los métodos y atributos nativos deben incluir de forma explícita los prefijos thisLayer. o thisProperty.

En la tabla siguiente se enumeran los métodos y atributos que requieren un prefijo. Por ejemplo, time debe escribirse thisLayer.time, mientras que wiggle() debe escribirse thisProperty.wiggle()

Estos prefijos solo son necesarios en los casos en los que el atributo o método no recibe explícitamente una llamada en otra capa o propiedad. Por ejemplo, cuando se realiza la llamada thisComp.layer(1).hasParent, no es necesario agregar thisLayer. porque .hasParent ya está recibiendo explícitamente una llamada en layer(1).

Métodos que requieren thisLayer.

Atributos que requieren thisLayer.

Métodos que requieren thisProperty.

Atributos que requieren 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

Se reemplazan los operadores matemáticos por funciones vectoriales.

Tanto el motor de JavaScript como el de ExtendScript heredado permiten utilizar operadores matemáticos de sobrecarga en matrices empleando sintaxis como position + [100,100], aunque esto no funciona para las expresiones de una biblioteca de funciones de expresiones .jsx o dentro de eval().

Para realizar operaciones matemáticas en propiedades de matrices como Position, Scale, etc., se deben utilizar los equivalentes vectoriales para la suma, resta, multiplicación y división. Las funciones matemáticas vectoriales también sirven para números regulares, por lo que, en el caso de una propiedad que pueda utilizar ambos tipos de datos en una llamada, se debe emplear la función vectorial.

Nota:

Para las funciones matemáticas vectoriales debe utilizarse el prefijo thisLayer..

  • Suma: thisLayer.add(vec1, vec2)
  • Resta: thisLayer.sub(vec1, vec2)
  • Multiplicación: thisLayer.mul(vec, amount)
  • División: thisLayer.div(vec, amount)

A continuación se ofrecen ejemplos de expresiones que utilizan operaciones estándar y operaciones vectoriales actualizadas. Las expresiones vectoriales también utilizan los prefijos thisLayer. o thisProperty. apropiados cuando es necesario.

Para encontrar la diferencia entre un wiggle() y el valor de una propiedad Position:

// Matemáticas estándar:
wiggle() - value;
 
 
// Matemáticas vectoriales:
thisLayer.sub( thisProperty.wiggle(), value );

Para realizar una interpolación entre dos valores, de un modo similar a como se hace con linear(), pero con un rango que se extiende más allá de los valores mínimo y máximo definidos:

// Matemáticas estándar:
value1 + ( ( t - tMin ) / ( tMax - tMin ) ) * ( value2 - value1 );
 
 
// Matemáticas vectoriales:
thisLayer.add( value1, thisLayer.mul( thisLayer.div( thisLayer.sub( t, tMin ), thisLayer.sub( tMax, tMin ) ), thisLayer.sub( value2, value1 ) ) );

Para entrar y salir de un bucle de una propiedad Position:

// Matemáticas estándar:
loopIn( “cycle” ) + loopOut( “cycle” ) - value;
 
 
// Matemáticas vectoriales:
thisLayerub( thisLayerdd( thisPropertyoopIn( “cycle” ), thisPropertyoopOut( “cycle” ) ), value 
Logotipo de Adobe

Inicia sesión en tu cuenta