S'utilitza la funció noise()
per generar valors pseudoaleatoris suaus entre 0 i 1.
Aquests valors es mapegen per moure la cara de manera natural:
let noiseVal = noise(frameCount * 0.01); faceX = map(noiseVal, 0, 1, width/2 - 20, width/2 + 20); faceY = map(noise(frameCount * 0.02), 0, 1, height/2 - 20, height/2 + 20);
Les funcions sin()
i cos()
s'utilitzen per animar la mida dels ulls:
let leftEyeSize = 20 + 10 * cos(frameCount * 0.1); let rightEyeSize = 20 + 10 * sin(frameCount * 0.1);Això crea una oscil·lació suau entre 10 i 30 píxels.
La forma de la boca canvia segons l'estat emocional:
if (isSad) { arc(faceX, faceY + 40, 80, mouthHeight, PI, 0); } else { arc(faceX, faceY + 30, 80, mouthHeight, 0, PI); }
0, PI
crea un somriure, mentre que PI, 0
crea una expressió trista.
Les tecles 'p' i 't' controlen el plor i la tristesa respectivament:
function keyPressed() { if (key === 'p' || key === 'P') { isCrying = !isCrying; } else if (key === 't' || key === 'T') { isSad = !isSad; } }
Les llàgrimes es creen com a objectes de la classe Tear
.
S'afegeixen noves llàgrimes cada 20 frames si isCrying
és true:
if (frameCount % 20 === 0) { tears.push(new Tear(faceX - 40, faceY - 10)); tears.push(new Tear(faceX + 40, faceY - 10)); }Cada llàgrima té la seva pròpia posició i velocitat, i es mou cap avall fins a sortir de la pantalla.