Anticipazione e superamento
L’anticipazione, uno dei dodici principi dell’animazione, prepara un movimento con un piccolo spostamento nella direzione opposta. Il superamento porta il corpo oltre il punto d’arrivo, a cui torna dopo un istante, come per inerzia. Qui li produce tutti e due una sola funzione di easing.
Algoritmo
a ogni fotogramma: draw()
calcolare il tempo del movimento, da 0 a 1 in 90 fotogrammi,
poi fermo a 1 per altri 90 constrain()
trasformare il tempo con la funzione di easing easeInOutBack()
interpolare la posizione fra partenza e arrivo lerp()
un ciclo sì e uno no, rovesciare la posizione if()
disegnare il cerchio
Istruzioni
È una delle funzioni di easing di Robert Penner, raccolte con i loro grafici su easings.net: riceve un tempo da 0 a 1 e restituisce un valore che all’inizio scende fino a circa -0.1 e verso la fine sale fino a circa 1.1, prima di tornare a 1. Di quanto, lo decide c.
Il resto della divisione per 180 conta i fotogrammi da 0 a 179, poi ricomincia; diviso per 90 va da 0 a quasi 2, e constrain() lo ferma a 1. Il cerchio si muove nei primi 90 fotogrammi e resta fermo negli altri 90.
Con t da solo il movimento sarebbe uniforme. Con la funzione di easing il cerchio arretra di circa 47 pixel prima di partire, e supera l’arrivo di altrettanti.
floor( frameCount / 180 ) conta i cicli completati: in quelli dispari la posizione si rovescia rispetto alla larghezza della tela, e il cerchio torna da destra a sinistra.
Variazioni
Con
tal posto dieaseInOutBack( t )il movimento diventa uniforme e meccanico, senza anticipazione né superamento.
Con
1.70158 * 2al posto di1.70158 * 1.525anticipazione e superamento passano da circa 47 a circa 71 pixel.