Ich bin neu in der Verwendung von Ausdrücken in After Effects und habe Java zuvor kaum berührt. Mit einigen Online-Tutorials und gesundem Menschenverstand gelang es mir jedoch gestern, eine Titelgrafik für das untere Drittel zu erstellen. Java wird verwendet, um seine Position basierend darauf zu ändern, wie viel Text darin geschrieben ist. Die Titelgrafik wird auf der linken Seite des Bildschirms ausgeblendet, sodass sie beim Schreiben von Text nach links oder rechts verschoben wird, um der Textlänge zu entsprechen. Ich habe den Code unten eingefügt.
s =thisComp.layer("Header title");
x = s.sourceRectAtTime(time-s.inPoint,true).width;
subl =thisComp.layer("Sub title");
subt = subl.sourceRectAtTime(time-subl.inPoint,true).width;
text = Math.max(subt, x) -100;
max = 659.4;
m = Math.min(max, text);
[m, 871]
Wo ich Probleme habe, ist, dass ich daraus eine animierte Bewegungsgrafik machen möchte, bei der die Grafik einfach zum richtigen Zeitpunkt hinein- und herausgleitet. Wenn jedoch weniger Text vorhanden ist, befindet er sich weiter außerhalb des Frames und es dauert länger, ihn einzuschieben – was bedeutet, dass er nicht mit anderen Teilen der Animation synchron ist. Ich mache mir keine Sorgen um eine konsistente Geschwindigkeit, ich möchte nur, dass sie zur gleichen Zeit erscheint, wie sie mit anderen Animationen übereinstimmen muss. Der einzige Weg, wie ich das genau sehen kann, ist durch weiteres Codieren, wo es ein wenig über mich hinausgeht!
Ich habe versucht, mit Ausdrücken zu animieren, if
die von der Funktion abhängig time
sind, aber dies hat keinen Übergang erzeugt, die Grafik ist sofort von Punkt zu Punkt gesprungen. Ich kann auch nichts zum Erstellen von Keyframes in Java finden, also bin ich mir nicht sicher, wie ich das am besten mache.
Schätze wirklich jede Hilfe, um mich auf den richtigen Weg zu bringen.
Es gibt einige eingebaute Funktionen nur für diesen Zweck. Sie finden sie im Interpolationsordner in der Ausdrucks-Dropdown-Liste. Am einfachsten ist die linear()
Funktion:
linear(t, value1, value2)
Diese Funktion interpoliert linear zwischen value1 und value2 basierend auf dem Wert von t, wobei 0 ≤ t ≤ 1
. Also, wenn t=0
die Funktion zurückkehrt value1
und wenn t=1
sie zurückkehrt value2
. Es kann auch fünf Parameter in der Form annehmen
linear(t, tMin, tMax, value1, value2)
In dieser Form wird anstelle des Bereichs 0-1 t
der Bereich tMin
bis verwendet tMax
.
Zusammen mit linear()
gibt es auch ease()
, easeIn()
und easeOut()
. Diese interpolieren mit Easing – was bedeutet, dass die Animation am Anfang oder am Ende oder beidem langsamer wird.
In Ihrem Beispiel könnten Sie dies also vor der letzten Zeile hinzufügen:
startTime = inPoint; //if you want the animation to start at the start of the layer
m = ease(time-startTime, 0, animationLength, 0, m)
Dadurch wird die Animation vom In-Point der Ebene für animationLength
Sekunden bis zur berechneten Position fließend.
Oh, übrigens, es ist Java- Skript , nicht Java. Das sind völlig unterschiedliche Sprachen. Wie sie sagen, sind Java und Javascript ähnlich wie "Auto" und "Teppich".
5Diraptor
stib