Primero me gustaría aclarar que de ninguna manera soy un programador profesional. Sin embargo, sí incursiono en los gráficos en movimiento y recientemente comencé a trabajar con expresiones. He publicado esta misma pregunta en Graphic Design stackexchange, pero decidí publicar también aquí por si acaso.
Actualmente estoy haciendo una animación en la que varios objetos "explotan" desde el centro y luego se mueven. Estoy haciendo esto de la manera más básica: colocar fotogramas clave y mover la expresión. Sin embargo, he usado una secuencia de comandos fácil y rápida para que la explosión ocurra sin problemas, y aplicar la expresión de movimiento justo después hace que se vea raro.
Aquí está la animación tal como está actualmente. Tenga en cuenta que el objeto de la derecha se mueve de forma errática y diferente del resto.
https://i.imgur.com/FE0UfLQ.gif
Y aquí está el guión completo del errático boi. Esto es del complemento Ease and Whiz, además de la expresión de movimiento muy muy básica al final.
Entonces mi pregunta es: ¿cómo hago para que la expresión de movimiento solo comience después de que la facilidad y el genio hayan terminado? Sé que la expresión de movimiento acepta valores de tiempo, pero, sinceramente, nunca he hecho nada tan complejo.
function easeandwizz_inoutQuint(t, b, c, d) { if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; return c/2*((t-=2)*t*t*t*t + 2) + b; } function easeAndWizz() { var n = 0; if (numKeys > 0) { n = nearestKey(time).index; if (key(n).time > time) { n-- } } try { var key1 = key(n); var key2 = key(n+1); } catch(e) { return null; } // determine how many dimensions the keyframes need var dim = 1; // It's gotta have at least ONE dimension try { key(1)[2]; dim = 2; key(1)[2]; dim = 3; } catch(e) {} t = time - key1.time; d = key2.time - key1.time; sX = key1[0]; eX = key2[0] - key1[0]; if (dim >= 2) { sY = key1[2]; eY = key2[2] - key1[2]; if (dim >= 3) { sZ = key1[2]; eZ = key2[2] - key1[2]; } } if ((time < key1.time) || (time > key2.time)) { return value; } else { val1 = easeandwizz_inoutQuint(t, sX, eX, d); switch (dim) { case 1: return val1; break; case 2: val2 = easeandwizz_inoutQuint(t, sY, eY, d); return [val1, val2]; break; case 3: val2 = easeandwizz_inoutQuint(t, sY, eY, d); val3 = easeandwizz_inoutQuint(t, sZ, eZ, d); return [val1, val2, val3]; break; default: return null; } } } (easeAndWizz() || value); wiggle(1,20); [1]: https://i.stack.imgur.com/NSzaA.gif [2]: https://i.stack.imgur.com/cBrMV.gif