Skip to main content

Wiggle avançado

Com mais um pouco de código, o wiggle controla intensidade ao longo do tempo, restringe o eixo, decai após impacto e até faz loop.

Decaimento após impacto

var decay = 3;
var freq = 8;
var amp = 40;
var t = time - thisLayer.inPoint;
wiggle(freq, amp * Math.exp(-decay * t))

Amplitude começa em 40 e decai. Math.exp(-3 * t) chega perto de zero em ~1 segundo.

Controlado por slider

var intensidade = thisComp.layer("CONTROLES").effect("Wiggle Intensidade")("Slider");
wiggle(3, intensidade)

Keyframeia o slider pra que o shake aumente e diminua.

Frequência que cresce com o tempo

var freq = linear(time, 0, 2, 1, 10); // de 1 a 10 nos primeiros 2s
wiggle(freq, 20)

Wiggle em loop perfeito

O wiggle padrão não é loopável. Para loop seamless:

var loopDuration = thisComp.duration;
var t = time % loopDuration;
wiggle(2, 30, 1, 0.5, t)

Loopable wiggle (variante)

// funciona pro loop mas mantém a aleatoriedade
var cycleDur = 3; // segundos por ciclo
var t = time % cycleDur;
wiggle(2, 30, 1, 0.5, t)

Movimento circular randomizado

var w = wiggle(2, 30);
var r = Math.sqrt(w[0]*w[0] + w[1]*w[1]);
var a = Math.atan2(w[1], w[0]);
[r * Math.cos(a), r * Math.sin(a)]