Schiacciamento e allungamento
Primo dei dodici principi dell’animazione (squash and stretch): un corpo flessibile si allunga nella direzione del movimento quando è veloce e si schiaccia negli urti, conservando sempre lo stesso volume. Qui la deformazione dipende dalla velocità, ricavata dalla posizione del fotogramma precedente.
Algoritmo
a ogni fotogramma: draw()
calcolare l'altezza della base della palla, come in un rimbalzo sin()
ricavare la velocità dallo spostamento rispetto a prima
allungare la palla in proporzione alla velocità map()
se la palla scende oltre il bordo inferiore della tela: if()
schiacciarla in proporzione a quanto scende map()
riportarla sul bordo
disegnarla stretta quanto è alta, o larga quanto è bassa ellipse()
Istruzioni
sin() va da -1 a 1, e abs() lo rende sempre positivo: il valore sale da 0 a 1 e torna a 0 come l’altezza di un rimbalzo, veloce in basso e lento in cima. Moltiplicato per 200 e sottratto da 260, porta la base della palla da 260 a 60 pixel. Gli ultimi 20 pixel, oltre il bordo inferiore della tela, diventano schiacciamento.
La velocità è lo spostamento rispetto al fotogramma precedente, sempre positivo, e arriva a circa 6 pixel per fotogramma al momento del contatto. La posizione attuale viene poi memorizzata per il fotogramma successivo.
L’altezza viene moltiplicata per k e la larghezza divisa per lo stesso valore: l’area dell’ellisse resta quella del cerchio di 40 pixel, e la palla sembra conservare il suo volume.
Variazioni
Con
1come ultimo parametro di tutte e due lemap()la palla resta rigida, e il rimbalzo sembra quello di un oggetto duro.
Con
2e0.3al posto di1.5e0.5la deformazione diventa quasi caricaturale: è l’esagerazione, un altro dei dodici principi.