Skip to main content
Inspiring
February 9, 2022
Answered

More Concise keyframe reference?

  • February 9, 2022
  • 1 reply
  • 508 views

Hi there! I'm relatively new to Java in AfterEffects. I know enough to do what I'd like, but I have a feeling there's an easier way to do it. If there any way to make this more concise, by not having to name every single keyframe specifically? Could I make a blanket statement to say, "If there is any keyframe, do this"?

L = thisLayer;
s = L.effect("Slide speed")(1)/29.97 // Slider determines how many frames slide will take

// Times of Keyframes
t1 = key(1).time;
t3 = key(2).time;
t5 = key(3).time;
t7 = key(4).time;
t9 = key(5).time;
t11 = key(6).time;

// Beginning points of slides, calculated from keyframes
t2 = t3-s;
t4 = t5-s;
t6 = t7-s;
t8 = t9-s;
t10 = t11-s;

// Values of Keyframes
v1 = valueAtTime(key(1).time);
v2 = valueAtTime(key(2).time);
v3 = valueAtTime(key(3).time);
v4 = valueAtTime(key(4).time);
v5 = valueAtTime(key(5).time);
v6 = valueAtTime(key(6).time);

// Sliding motions
slide1 = ease(time, t2, t3, v1, v2);
slide2 = ease(time, t4, t5, v2, v3);
slide3 = ease(time, t6, t7, v3, v4);
slide4 = ease(time, t8, t9, v4, v5);
slide5 = ease(time, t10, t11, v5, v6);

if (time<t2) {v1}
else if (time<t3) {slide1;}
else if (time<t4) {v2}
else if (time<t5) {slide2;}
else if (time<t6) {v3}
else if (time<t7) {slide3;}
else if (time<t8) {v4}
else if (time<t9) {slide4;}
else if (time<t10) {v5}
else if (time<t11) {slide5;}
else {v6}
This topic has been closed for replies.
Correct answer Dan Ebberts

Try this:

L = thisLayer;
s = L.effect("Slide speed")(1)/29.97;
val = value;
if (numKeys > 0){
  n = nearestKey(time).index;
  if (time > key(n).time) n++;
  if (n > 1 && n <= numKeys){
    val = ease(time,key(n).time-s,key(n).time,key(n-1).value,key(n).value);
  }
}
val

1 reply

Dan Ebberts
Community Expert
Community Expert
February 9, 2022

Probably something like this:

L = thisLayer;
s = L.effect("Slide speed")(1)/29.97;
val = value;
if (numKeys > 0){
  n = nearestKey(time).index;
  if (time < key(n).time) n--;
  if (n > 0 && n < numKeys){
    val = ease(time,key(n).time,key(n).time + s,key(n).value,key(n+1).value);
  }
}
val
Inspiring
February 9, 2022

Thanks! This worked perfectly. 🙂