Benutzerhandbuch Abbrechen

Syntaxunterschiede zwischen Expression-Engines

  1. Benutzerhandbuch –After Effects
  2. Beta-Versionen
    1. Übersicht über das Beta-Programm
    2. After Effects Beta Home
  3. Erste Schritte
    1. Erste Schritte mit After Effects
    2. Neue Funktionen in After Effects 
    3. Versionshinweise | After Effects
    4. Systemanforderungen für After Effects
    5. Tastaturbefehle in After Effects
    6. Unterstützte Dateiformate | After Effects
    7. Hardware-Empfehlungen
    8. After Effects für Apple-Chip
    9. Planung und Einrichtung
  4. Arbeitsbereiche
    1. Allgemeine Elemente der Benutzeroberfläche
    2. Lernen Sie die After Effects-Oberfläche kennen
    3. Arbeitsabläufe
    4. Arbeitsbereiche, Bedienfelder und Anzeigen
  5. Projekte und Kompositionen
    1. Projekte
    2. Kompositionen – Grundlagen
    3. Erstellen von Unterkompositionen, Verschachteln und Vor-Rendern
    4. Anzeigen detaillierter Leistungsinformationen mit Composition Profiler
    5. CINEMA 4D-Kompositions-Renderer
  6. Importieren von Footage
    1. Vorbereiten und Importieren von Standbildern
    2. Importieren aus After Effects und Adobe Premiere Pro
    3. Importieren und Interpretieren von Video und Audio
    4. Vorbereiten und Importieren von 3D-Bilddateien
    5. Importieren und Interpretieren von Footage-Elementen
    6. Arbeiten mit Footage-Elementen
    7. Erkennen von Bearbeitungspunkten mithilfe der Szenenbearbeitungs-Erkennung
    8. XMP-Metadaten
  7. Text und Grafiken
    1. Text
      1. Formatieren von Zeichen und das Bedienfeld „Zeichen“
      2. Effekte unter „Text“
      3. Erstellen und Bearbeiten von Textebenen
      4. Formatieren von Absätzen und das Bedienfeld „Absatz“
      5. Extrudieren von Text- und Formebenen
      6. Animieren von Text
      7. Beispiele und Ressourcen zur Textanimation
      8. Live-Text-Vorlagen
    2. Animationen
      1. Arbeiten mit Animationsvorlagen in After Effects
      2. Verwenden von Expressions zum Erstellen von Dropdown-Listen in Animationsvorlagen
      3. Verwenden von erforderlichen Eigenschaften zum Erstellen von Animationsvorlagen
      4. Ersetzen von Bildern und Videos in Animationsvorlagen und erforderlichen Eigenschaften
      5. Schneller und einfacher animieren mithilfe des Bedienfelds „Eigenschaften“
  8. Zeichnen, Malen und Pfade
    1. Überblick über Formebenen, Pfade und Vektorgrafiken
    2. Malwerkzeuge: Pinsel, Kopierstempel und Radiergummi
    3. Verjüngen von Formenkonturen
    4. Formenattribute, Malvorgänge und Pfadvorgänge bei Formebenen
    5. Verwenden des Formeneffekts „Offset-Pfade“ zum Ändern von Formen
    6. Erstellen von Formen
    7. Erstellen von Masken
    8. Entfernen von Objekten aus Videos mit dem Bedienfeld „Inhaltsbasierte Füllung“
    9. „Roto-Pinsel“ und „Maske verbessern“
  9. Ebenen, Marken und Kamera
    1. Auswählen und Anordnen von Ebenen
    2. Füllmethoden und Ebenenstile
    3. 3D-Ebenen
    4. Ebeneneigenschaften
    5. Erstellen von Ebenen
    6. Verwalten von Ebenen
    7. Ebenenmarken und Kompositionsmarken
    8. Kameras, Lichter und Interessenbereiche
  10. Animation, Keyframes, Motion-Tracking und Keying
    1. Animation
      1. Animation – Grundlagen
      2. Animation mit Marionettenwerkzeugen
      3. Verwalten und Animieren von Formpfaden und -masken
      4. Animieren von Formen aus Sketch und Capture mit After Effects
      5. Ausgewählte Animationswerkzeuge
      6. Arbeiten mit datengesteuerten Animationen
    2. Keyframe
      1. Keyframe-Interpolation
      2. Festlegen, Auswählen und Löschen von Keyframes
      3. Bearbeiten, Verschieben und Kopieren von Keyframes
    3. Bewegungs-Tracking
      1. Tracking und Stabilisieren von Bewegung
      2. Gesichts-Tracking
      3. Masken-Tracking
      4. Maskenreferenz
      5. Geschwindigkeit
      6. Zeitdehnungen und Zeitverzerrungen
      7. Timecode und Zeitanzeigeeinheiten
    4. Keying
      1. Keying
      2. Effekte unter „Keying“
  11. Transparenz und Komposition
    1. Erstellen von Kompositionen und Transparenz – Überblick und Ressourcen
    2. Alphakanäle und Masken
    3. Spurmasken und Traveling Mattes
  12. Anpassen der Farbe
    1. Farben – Grundlagen
    2. Farb-Management
    3. Effekte zur Farbkorrektur
    4. OpenColorIO- und ACES-Farbmanagement
  13. Effekte und Animationsvorgaben
    1. Überblick über Effekte und Animationsvorgaben
    2. Effektliste
    3. Effekt-Manager
    4. Effekte unter „Simulation“
    5. Effekte unter „Stilisieren“
    6. Effekte unter „Audio“
    7. Effekte unter „Verzerren“
    8. Effekte unter „Perspektive“
    9. Effekte unter „Kanäle“
    10. Effekte unter „Generieren“
    11. Effekte unter „Zeit“
    12. Effekte unter „Überblenden“
    13. Der Effekt „Rolling-Shutter-Reparatur“
    14. Effekte „Weich- und Scharfzeichnen“
    15. Effekte unter „3D-Kanal“
    16. Effekte unter „Dienstprogramm“
    17. Effekte unter „Matt“
    18. Effekte unter „Störung und Körnung“
    19. Effekt „Details erhalten (Vergrößerung)“
    20. Veraltete Effekte
  14. Ausdrücke und Automatisierung
    1. Expressions
      1. Expressions – Grundlagen
      2. Verstehen der Sprache für Expressions
      3. Verwenden von Einstellungen für Expressions
      4. Syntaxunterschiede zwischen den Expression-Engines für JavaScript und das veraltete ExtendScript
      5. Bearbeiten von Expressions
      6. Fehler bei Expressions
      7. Verwenden des Expressions-Editors
      8. Verwenden von Expressions zum Bearbeiten und Zugreifen auf Texteigenschaften
      9. Sprachreferenz für Expressions
      10. Beispiele für Expressions
    2. Automatisierung
      1. Automatisierung
      2. Skripte
  15. Immersives Video, VR und 3D
    1. Erstellen von VR-Umgebungen in After Effects
    2. Anwenden von immersiven Videoeffekten
    3. Kompositionswerkzeuge für VR/360-Grad-Videos
    4. Erweiterter 3D-Renderer
    5. Importieren und Hinzufügen von 3D-Modellen zu Ihrer Komposition
    6. Importieren von 3D-Modellen aus Creative Cloud Libraries
    7. Bildbasierte Beleuchtung
    8. Extrahieren und Animieren von Lichtern und Kameras aus 3D-Modellen
    9. Tracking von 3D-Kamerabewegungen
    10. Werfen und Akzeptieren von Schatten
    11. Eingebettete 3D-Modell-Animationen
    12. Schattenfänger
    13. Extraktion von 3D-Tiefendaten
    14. Ändern der Materialeigenschaften einer 3D-Ebene
    15. Arbeiten im 3D-Designraum
    16. 3D-Transformations-Gizmos
    17. Machen Sie mehr mit 3D-Animation
    18. Vorschau von Änderungen an 3D-Designs in Echtzeit mit der Mercury 3D-Engine
    19. Hinzufügen von responsiven Designs zu Grafiken 
  16. Ansichten und Vorschau
    1. Vorschau
    2. Videovorschau mit Mercury Transmit
    3. Ändern und Verwenden von Ansichten
  17. Rendern und Exportieren
    1. Grundlagen zum Rendern und Exportieren
    2. H.264-Codierung in After Effects
    3. Exportieren eines After Effects-Projekts als Adobe Premiere Pro-Projekt
    4. Konvertieren von Filmen
    5. Multi-Frame-Rendering
    6. Automatisches Rendern und Netzwerk-Rendern
    7. Rendern und Exportieren von Standbildern und Standbildsequenzen
    8. Verwenden des GoPro CineForm-Codecs in After Effects
  18. Arbeiten mit anderen Programmen
    1. Dynamic Link und After Effects
    2. Arbeiten mit After Effects und anderen Anwendungen
      1. Exportieren eines After Effects-Projekts als Adobe Premiere Pro-Projekt
    3. Synchronisationseinstellungen in After Effects
    4. Creative Cloud-Bibliotheken in After Effects
    5. Plug-ins
    6. Cinema 4D und Cineware
  19. Zusammenarbeit: Frame.io und Team Projects
    1. Zusammenarbeit in Premiere Pro und After Effects
    2. Frame.io
      1. Frame.io installieren und aktivieren
      2. Verwenden von Frame.io mit Premiere Pro und After Effects
      3. Häufig gestellte Fragen
    3. Team Projects
      1. Erste Schritte mit Team Projects
      2. Erstellen eines Team-Projekts
      3. Zusammenarbeiten mit Team Projects
  20. Arbeitsspeicher, Speicherung und Leistung
    1. Arbeitsspeicher und Speicherung
    2. Wie After Effects Probleme mit unzureichendem Arbeitsspeicher bei der Vorschau behandelt    
    3. Verbessern der Leistung
    4. Voreinstellungen
    5. Anforderungen an GPU und GPU-Treiber für After Effects
  21. Wissensdatenbank
    1. Bekannte Probleme
    2. Behobene Probleme
    3. Häufig gestellte Fragen
    4. After Effects und macOS Ventura
    5. Wie After Effects Probleme mit unzureichendem Arbeitsspeicher bei der Vorschau handhabt

Dieses Dokument erläutert die Syntaxunterschiede der Expression-Sprache zwischen den Expression-Engines für JavaScript und das veraltete ExtendScript in After Effects 16.0.

In diesem Dokument erfahren Sie, wie Sie Ihre Expressions für die Expression-Engine für JavaScript verbessern oder Fehler beheben, die auftreten, wenn für vorherige Versionen von After Effects geschriebene Expressions nicht in der Expression-Engine für JavaScript ausgewertet werden können.

Die After Effects-Expression-Sprache basiert auf JavaScript, bei welchem es sich um eine Implementierung von ECMAScript handelt. Die Expression-Engine für JavaScript in After Effects 16.0 basiert auf ECMAScript 2018. Die Expression-Engine für das veraltete ExtendScript basiert auf ECMAScript 3 (1999). (Adobe ExtendScript ist außerdem die Sprache, die für die Skripterstellung in After Effects und anderen Adobe-Applikationen verwendet wird.)

Sie können die unten aufgeführten Beispiele sowie die Anleitungen zum Erstellen von Expressions heranziehen, die sich für die Expression-Engines für JavaScript und das veraltete ExtendScript gleichermaßen eignen.

Wesentliche Unterschiede zwischen den Expression-Engines für JavaScript und das veraltete ExtendScript:

Syntax des modernen JavaScripts: Es wurden Verbesserungen an der Expression-Sprache vorgenommen.

Expressions können JavaScript-Syntax von ECMAScript 2018 verwenden.

Die JavaScript-Sprache wurde seit Einführung von ECMAScript 3 vielfach ergänzt. Es gibt neue Methoden zur Verwendung mit Zeichenfolgen, Arrays und Objekten, die kompakter und besser lesbar sind, und neue Möglichkeiten, um u. a. Variablen und Funktionen sowie Standardparameter und Spread-Operatoren zu deklarieren. In diesem Dokument wird nicht näher auf diese Änderungen eingegangen, da sie allgemein für die JavaScript-Sprache gelten. Weitere Informationen zu den zahlreichen Syntaxergänzungen finden Sie unter den folgenden Links:

Zusätzliche empfohlene und detaillierte Ressourcen zum Erlernen von JavaScript:

„.value“ ist bei Verknüpfung mit anderen Eigenschaften aus dem Quelltext nicht mehr erforderlich

Wenn Sie einen anderen Eigenschaftswert aus einer Quelltext-Eigenschaft referenzieren, muss für die Expression-Engine für das veraltete ExtendScript .value am Ende der Eigenschaft hinzugefügt werden. Die Engine für JavaScript zeigt standardmäßig den Wert der Eigenschaft an, sofern nicht explizit ein anderes Attribut wie .propertyIndex oder .name verwendet wird.

Beispiel:

thisComp.layer(„Solid 1“).transform.position
 
// In der Legacy-Engine wird dies als „[Objekteigenschaft]“ ausgewertet, wenn es auf eine Quelltexteigenschaft angewendet wird.
// In der JavaScript-Engine wird dies zum Wert der Eigenschaft „Position“ der Ebene „Farbfläche 1“ ausgewertet, wenn sie auf eine Quelltexteigenschaft angewendet wird.

Einfrieren von Eigenschaftswerten mit „posterizeTime(0)“

In After Effects 16.0 wird mit posterizeTime(0) der Eigenschaftswert zum Zeitpunkt „0“ in der Komposition eingefroren. Dies gilt für die Expression-Engines für JavaScript und das veraltete ExtendScript gleichermaßen.

Hinweis:

Diese Funktion ist nicht abwärtskompatibel und kann in After Effects-Versionen vor Version 16.0 zu unerwarteten Ergebnissen führen.

Inkompatible veraltete Syntax

Fast die gesamte Syntax der Expression-Engine für das veraltete ExtendScript ist mit der Expression-Engine für JavaScript kompatibel. Einige Teile der veralteten Syntax sind jedoch nicht kompatibel. Dies liegt einerseits daran, dass das moderne JavaScript Syntaxänderungen aufweist, und anderseits daran, dass veraltete Syntax entfernt wurde. Beispiele für nicht funktionierende und funktionierende Syntax sind im Folgenden aufgeführt.

Die meisten dieser Syntaxunterschiede können durch Applikationsskripterstellung korrigiert werden, bei der die Expressions neu geschrieben werden.

Syntaxunterschiede für if/else-Anweisungen

Im Allgemeinen empfiehlt es sich, if/else-Anweisungen gemäß den MDN-Richtlinien immer mit Zeilenumbrüchen und Klammern zu schreiben. Während die Expression-Engine für das veraltete ExtendScript Abweichungen bei if/else-Anweisungen tolerierte, ist die Engine für JavaScript diesbezüglich strikt. Eine fehlerhafte if/else-Syntax kann bei Verwendung der Engine für JavaScript nicht ausgewertet werden.

Beenden einer Expression mit einer if-Anweisung ohne else-Anweisung ist nicht zulässig

Wenn eine Expression mit einer if-Anweisung ohne eine else-Anweisung endet, kann die JavaScript-Engine die Expression nicht auswerten, was zur Fehlermeldung „In der Expression wird ein nicht definierter Wert verwendet (u. U. liegt das Subscript des Arrays außerhalb des gültigen Bereichs?)“ führt. Bei Verwendung der Engine für das veraltete ExtendScript wird für die folgende Expression der Wert „100“ festgelegt, wenn der Zeitraum länger als eine Sekunde ist. Andernfalls wird der Wert auf „50“ festgelegt:

var x = 50;
if ( time > 1 ) {
    x = 100
}
// Die „else“-Anweisung hier wird impliziert, aber nicht angegeben.

Bei Verwendung der JavaScript-Engine ist die explizite Angabe des dann-Teils der Anweisung erforderlich, wenn es sich dabei um die letzte Anweisung in der Expression handelt:

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

Dies wird in beiden Engines korrekt ausgewertet.

„if“ und „else“ dürfen nicht ohne Klammern in derselben Zeile stehen

Eine if/else-Anweisung in einer einzelnen Zeile ohne Klammern wird zwar von der Engine für das veraltete ExtendScript ausgewertet, bei Verwendung der Engine für JavaScript führt dies jedoch zu einer Fehlermeldung wie „Syntaxfehler: unerwarteter Token 'else'“ oder „In der Expression wird ein nicht definierter Wert verwendet (u. U. liegt das Subscript des Arrays außerhalb des gültigen Bereichs?)“. Die Fehlermeldung kann je nach Kontext und Eigenschaftstyp abweichen.

Bei Verwendung der Engine für das veraltete ExtendScript wird für die folgende Expression der Wert „100“ festgelegt, wenn der Zeitraum länger als eine Sekunde ist. Andernfalls wird der Wert auf „50“ festgelegt:

if ( time > 1 ) 100 else 50;

Bei Verwendung der Engine für JavaScript sind für die Auswertung von if/else-Anweisungen Zeilenumbrüche oder Klammern erforderlich. In einfachen Fällen kann stattdessen auch der ternäre Operator verwendet werden. Folgende Syntax kann bei Verwendung der Engine für JavaScript verwendet werden:

// Lösung A: Durch das Hinzufügen eines Zeilenumbruchs vor „else“ können beide Engines korrekt ausgewertet werden.
if ( time > 1 ) 100
else 50;
 
// Lösung B: Durch das Hinzufügen korrekter Klammern können ebenfalls beide Engines korrekt ausgewertet werden.
 
if ( time > 1 ) { 100 } else { 50 };
 
// Lösung C: Verwenden Sie einen ternären Operator anstelle der „if...else“-Anweisung, die auch in beiden Engines korrekt ausgewertet wird.
 
time > 1 ? 100 : 50;

Sämtliche der oben aufgeführten Lösungen werden bei Verwendung der Expression-Engines für JavaScript und das veraltete ExtendScript gleichermaßen korrekt ausgewertet.

Expressions dürfen nicht mit einer Funktionsdeklaration enden

Wenn eine Expression mit einer Funktionsdeklaration endet, kann die Engine für JavaScript die Expression nicht auswerten, was zur Fehlermeldung „Objekt vom Typ X vorgefunden; eine Zahl, ein Array oder eine Eigenschaft wurde benötigt“ führt. Bei Verwendung der Engine für JavaScript muss das zuletzt ausgewertete Element einen Wert zurückgeben, anstatt einen Wert zu deklarieren.

Das folgende Beispiel funktioniert nur bei Verwendung der Engine für das veraltete ExtendScript:

timesTen( value); // Die Legacy-Engine wertet diese Zeile aus, obwohl die Funktion unten deklariert ist.

function timesTen ( val ) {
    return val * 10
}

Wenn eine Funktion als letzte Zeile (anstelle der Deklaration) aufgerufen wird, wird die Expression in beiden Engines korrekt ausgewertet:

function timesTen ( val ) {
    return val * 10
}
 
timesTen( value);  // Die JavaScript-Engine benötigt den Funktionsaufruf unterhalb der Deklaration, um den richtigen Wert zurückzugeben.

this()-Kurz-Syntax ist nicht zulässig; Verwenden Sie stattdessen thisLayer()

In der veralteten ExtendScript-Engine diente this als Kurzform für thisLayer. verwendet werden. Bei Verwendung der Engine für JavaScript bezieht sich this jedoch auf das globale Objekt. Stattdessen muss thisLayer verwendet werden, Die Verwendung von this führt zur Fehlermeldung Dies ist keine Funktion.

Im folgenden Beispiel für die Engine für das veraltete ExtendScript wird this für die Erstellung einer kompakten Verknüpfung von der Eigenschaft „Quelltext“ zu einer Eigenschaft „Textebenenposition“ verwendet:

this(5)(2).value;

In der JavaScript-Engine muss this ersetzt werden durch thisLayer:

thisLayer(5)(2).value;

thisLayer ist mit beiden Expression-Engines kompatibel.

Für den Array-Index-Zugriff der Eigenschaft „Quelltext“ auf Zeichen ist „.value“ erforderlich

Bei Verwendung der Engine für das veraltete ExtendScript konnte auf die Zeichen einer Quelltext-Eigenschaft mit einer Klammernotation wie auf ein Array zugegriffen werden:

text.sourceText[0] // Gibt das erste Zeichen des Textwerts der Quelltexteigenschaft zurück.

In der JavaScript-Engine muss .value hinzugefügt werden, um auf die Zeichen zugreifen zu können:

text.sourceText.value[0] // Gibt das erste Zeichen des Textwerts der Quelltexteigenschaft zurück.

Diese Syntax ist mit beiden Engines kompatibel.

Snake-Case-Eigenschaften und -Methoden sind nicht zulässig

Die veralteten Snake-Case-Eigenschaften und -Methoden (bei denen ein Unterstrich anstelle von Binnenversalien verwendet wird) werden von der Engine für JavaScript nicht unterstützt. Stattdessen sollten die camelCase-Versionen verwendet werden, da sie mit beiden Engines kompatibel sind. In der nachfolgenden Liste sind alle veralteten Snake-Case-Fälle und die entsprechenden camelCase-Versionen aufgeführt.

Snake-Case-Eigenschaften

camelCase-Eigenschaften

Snake-Case-Methoden

camelCase-Methoden

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()

Verwenden von eval() mit binär codierten (.jsxbin)-Expressions

Expressions, die im ExtendScript-Binärformat codiert sind (gespeichert als binäre .jsxbin-Datei aus ExtendScript ToolKit CC), werden von der Engine für JavaScript nicht unterstützt.

Wenn Sie eine Expression verschleiern möchten, verwenden Sie die Engine für das veraltete ExtendScript oder eine andere Verschleierungsmethode, die mit ECMAScript 2018 kompatibel ist. Einige Verschleierungsmethoden sind möglicherweise nicht mit beiden Expression-Engines kompatibel.

Eingeschränkte Unterstützung für das Objekt „$.“ (Dollar)

Die Methoden und Eigenschaften für das Objekt „$.“ (Dollar) sind ExtendScript-spezifisch und werden größtenteils nicht von der Engine für JavaScript unterstützt. In dieser Tabelle werden nicht unterstützte und unterstützte Anwendungsfälle für dasObjekt „$.“ (Dollar) aufgeführt:

Nicht unterstützt

Unterstützt

$.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 (wird von der veralteten ExtendScript-Engine nicht unterstützt)

$.global

Keine Unterstützung für „...reflect.properties“, „...reflect.methods“ und „toSource()“

reflect.properties und reflect.methods werden von der Engine für JavaScript nicht unterstützt, da es sich um ExtendScript-spezifische Methoden handelt, für die es keine direkten Entsprechungen in JavaScript gibt.

toSource() in JavaScript ist veraltet und nicht Teil eines Standards Tracks.

Um eine Liste der verfügbaren Eigenschaften und Methoden für eine bestimmte After Effects-Eigenschaft anzuzeigen, die dem entspricht, was durch die oben aufgeführten Methoden bereitgestellt wurde, verwenden Sie die folgende Expression für eine Quelltext-Eigenschaft und verknüpfen Sie sie mit der gewünschten Eigenschaft, z. B. indem Sie das Auswahlwerkzeug anstelle von thisProperty in Zeile 1 verwenden:

let obj = thisProperty; // Ersetzen Sie „thisProperty“ durch einen Eigenschaften-Link zu Ihrer gewünschten Eigenschaft.
let props = [];
 
do {
    Object.getOwnPropertyNames(obj).forEach(prop => {
        if (props.indexOf(prop) === -1) {
            props.push(prop);
        }
    });
} while (obj = Object.getPrototypeOf(obj));
 
props.join(„\n“);           // Gibt ein Array von Zeichenfolgen zurück, in denen die verfügbaren Eigenschaften und Methoden aufgelistet sind.

Die oben aufgeführte Expression ist nicht mit der Engine für das veraltete ExtendScript kompatibel. Sie verwendet Syntax und Methoden, die nicht in ECMAScript 3 verfügbar sind.

Syntaxanforderungen für .jsx-Bibliotheken für Expressions und „eval()“ bei Verwendung der Engine für JavaScript

Bei der Verwendung von Expressions innerhalb einer .jsx-Funktionsbibliothek für Expressions oder wenn eine Expression innerhalb von eval() aufgerufen wird, muss eine bestimmte Syntax geändert werden:

Ein explizites thisLayer.- oder thisProperty.-Präfix muss zu allen nativen Methoden oder Attributen hinzugefügt werden, die nicht explizit für eine Ebene oder Eigenschaft aufgerufen werden. Durch das Präfix erhält die Engine für JavaScript die Information, für welches Objekt Sie die Methode oder das Attribut aufrufen.

Mathematische Operationen an Arraywerten wie „Position“ müssen mithilfe von vektormathematischen Methoden oder Schleifenfunktionen berechnet werden, um auf jedes Element im Array angewendet zu werden. Überladene mathematische Operatoren wie „position + [100,100]“ werden nicht ausgewertet.

Bei Verwendung der Engine für JavaScript werden Expressions vor der Auswertung vorverarbeitet, um einen Teil der Expression-Syntax für das veraltete ExtendScript für die neue Engine lesbar zu machen. Diese Vorverarbeitungsaufgaben werden jedoch nicht ausgeführt, wenn Expressions aus einer .jsx-Funktionsbibliothek für Expressions ausgewertet werden oder wenn eine Expression innerhalb von eval() aufgerufen wird. Die oben genannten Syntaxänderungen müssen für diese Fälle manuell vorgenommen werden. Sämtliche dieser Syntaxänderungen sind mit der Engine für das veraltete ExtendScript abwärtskompatibel, sodass sich eine .jsx-Bibliothek für Expressions, die sich für die Verwendung mit der Engine für JavaScript eignet, auch für die Engine für das veraltete ExtendScript eignet.

Leistungstipp: Aufgrund der fehlenden Vorverarbeitung lässt sich mit dem Aufruf komplexer Expressions aus einer .jsx-Bibliothek mit dieser Syntax und der Engine für JavaScript im Vergleich zum direkten Aufruf derselben Expressions für eine Eigenschaft eine Leistungssteigerung erzielen.

Nativen Methoden und Attributen muss explizit „thisLayer.“ oder „thisProperty.“ vorangestellt werden

In der folgenden Tabelle sind die Methoden und Attribute aufgeführt, die ein Präfix erfordern. Beispielsweise muss „time“ als thisLayer.time geschrieben sein, wiggle() hingegen als thisProperty.wiggle()

Diese Präfixe werden nur dann benötigt, wenn das Attribut oder die Methode nicht bereits explizit für eine andere Ebene oder Eigenschaft aufgerufen wird. Beispielsweise ist beim Aufrufen von thisComp.layer(1).hasParent das Hinzufügen von thisLayer. nicht erforderlich, da .hasParent bereits explizit für layer(1) aufgerufen wird.

Methoden, für die thisLayer. erforderlich ist

Attribute, für die thisLayer. erforderlich ist

Methoden, für die thisProperty. erforderlich ist

Attribute, für die thisProperty. erforderlich ist

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

Ersetzen mathematischer Operatoren durch vektormathematische Funktionen

Die Engines für JavaScript und das veraltete ExtendScript ermöglichen beide das Überladen mathematischer Operatoren für Arrays durch die Verwendung von Syntax wie position + [100,100]. Dies gilt jedoch nicht für Expressions innerhalb einer .jsx-Funktionsbibliothek für Expressions oder innerhalb von eval().

Um Berechnungen für Arrayeigenschaften wie „Position“ und „Skalierung“ durchzuführen, sollten die vektormathematischen Entsprechungen für Addition, Subtraktion, Multiplikation und Division verwendet werden. Die vektormathematischen Funktionen eignen sich auch für reguläre Zahlen, sodass eine Funktion, die für Eigenschaften beider Datentypen aufgerufen werden kann, die vektormathematischen Funktionen verwenden sollte.

Hinweis:

Das Präfix thisLayer. muss mit den vektormathematischen Funktionen verwendet werden.

  • Addition: thisLayer.add(vec1, vec2)
  • Subtraktion: thisLayer.sub(vec1, vec2)
  • Multiplikation: thisLayer.mul(vec, amount)
  • Division: thisLayer.div(vec, amount)

Im Folgenden sind Beispiele für Expressions mit Standardberechnungen und aktualisierten Vektorberechnungen aufgeführt. Die vektormathematischen Expressions verwenden ggf. auch das entsprechende thisLayer.- oder thisProperty.-Präfix.

So suchen Sie nach Unterschieden zwischen einer wiggle()-Methode und dem Wert einer Position-Eigenschaft:

// Standardmathematik: 
wiggle() - value;
 
// Vektormathematik:
thisLayer.sub( thisProperty.wiggle(), value );

So interpolieren Sie ähnlich wie bei linear() zwischen zwei Werten, jedoch mit einem erweiterten Bereich über das definierte Minimum und Maximum hinaus:

// Standardmathematik:
value1 + ( ( t - tMin ) / ( tMax - tMin ) ) * ( value2 - value1 );
 
// Vektormathematik:
thisLayer.add( value1, thisLayer.mul( thisLayer.div( thisLayer.sub( t, tMin ), thisLayer.sub( tMax, tMin ) ), thisLayer.sub( value2, value1 ) ) );

So verwenden Sie eine Position-Eigenschaft in einer Vorwärts- oder Rückwärtsschleife:

// Standardmathematik:
loopIn( „cycle“ ) + loopOut( „cycle“ ) - value;
 
// Vektormathematik:
thisLayer.sub( thisLayer.add( thisProperty.loopIn( „cycle“ ), thisProperty.loopOut( „cycle“ ) ), value );

Schneller und einfacher Hilfe erhalten

Neuer Benutzer?