ayudar a animar un tercio inferior que está posicionado por expresiones

Soy nuevo en el uso de expresiones en After Effects y apenas he tocado Java antes. Sin embargo, usando algunos tutoriales en línea y sentido común, ayer logré crear un gráfico de título de tercios inferiores, el java se usa para cambiar su posición según la cantidad de texto escrito dentro. El gráfico del título se desangra hacia la izquierda de la pantalla, de modo que cuando se escribe texto en él, se mueve hacia la izquierda o hacia la derecha para coincidir con la longitud del texto. He incluido el código a continuación.

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]

Así que con un poco de texto:posición gráfica con menos texto

Con más texto:posición gráfica con más texto

Donde estoy luchando es que quiero convertir esto en un gráfico de movimiento animado, donde el gráfico simplemente se desliza hacia adentro y hacia afuera en el momento adecuado. Sin embargo, si hay menos texto, su posición está más alejada del cuadro y lleva más tiempo deslizarse, lo que significa que no está sincronizado con otras partes de la animación. No me preocupa la velocidad constante, solo quiero que aparezca al mismo tiempo que tiene que coincidir con otras animaciones. ¡La única forma en que puedo ver que esto suceda con precisión es codificando más, donde se me escapa un poco!

Intenté animar usando ifexpresiones dependientes de la timefunción, pero esto no creó una transición, el gráfico saltó instantáneamente de un punto a otro. Tampoco puedo encontrar nada sobre la creación de fotogramas clave en Java, así que no estoy seguro de cuál es la mejor manera de hacerlo.

Realmente aprecio cualquier ayuda para ponerme en el camino correcto.

Respuestas (1)

Hay algunas funciones integradas solo para este propósito. Los encontrará en la carpeta de interpolación en el menú desplegable de expresiones. La más simple es la linear()función:

linear(t, value1, value2)

Esta función interpola de forma lineal entre valor1 y valor2 en función del valor de t, donde 0 ≤ t ≤ 1. Entonces, si t=0la función regresa value1y si t=1regresa value2. También puede tomar cinco parámetros, en la forma

linear(t, tMin, tMax, value1, value2)

de esta forma, en lugar de usar el rango 0-1 t, usa el rango tMinhasta tMax.

Junto con linear()también hay ease(), easeIn()y easeOut(). Estos se interpolan con aceleración, lo que significa que la animación se ralentiza al principio o al final, o en ambos.

Entonces, en su ejemplo, podría agregar esto antes de la última línea:

startTime = inPoint; //if you want the animation to start at the start of the layer
m = ease(time-startTime, 0, animationLength, 0, m)

esto animará suavemente desde el punto de entrada de la capa durante animationLengthsegundos hasta la posición calculada.

Oh, por cierto , es Java script, no Java. Son idiomas completamente diferentes. Como dicen, Java y Javascript son similares de la misma manera que "coche" y "alfombra" son similares.

Supongo que todo el mundo ha estado usando esa expresión durante años... ¡pero creo que es IMPRESIONANTE! Creo que me acabo de enamorar de las expresiones AE :) Muchas gracias, aún no he probado mi ejemplo original, pero hice una prueba rápida para asegurarme de que entiendo cómo funciona y creo que sé cómo hacerlo. mi gráfico de movimiento ahora! ¡gracias de nuevo!
Las expresiones son la parte más poderosa de After Effects en mi humilde opinión.