Art generatiu amb condicions
Aprèn a prendre decisions al teu codi amb if, else if i else. Fes que les teves obres reaccionin a l'entorn, al ratolí, al teclat i al pas del temps, creant sistemes vius i responsius.
Què són les condicions i per què les necessitem?
Fins ara, els nostres sketches feien sempre el mateix o canviaven de manera contínua. Però l'art generatiu sovint necessita prendre decisions: "si el ratolí és a l'esquerra, pinta de blau; si no, de vermell". Les estructures condicionals permeten bifurcar el flux del programa segons si es compleix o no una condició.
- if – executa un bloc si la condició és certa.
- else if – comprova una altra condició si la primera és falsa.
- else – executa un bloc si cap condició anterior s'ha complert.
La sintaxi d'if, else if i else
Una condició s'escriu amb un operador de comparació (===, >, <, >=, <=, !==) i retorna true o false.
if (condició) {
// codi si la condició és certa
} else if (altraCondició) {
// codi si la primera és falsa i aquesta és certa
} else {
// codi si cap condició anterior és certa
}
Exemple bàsic: canviar el color d'un cercle segons la posició X del ratolí.
function draw() {
background(245);
if (mouseX < width/3) { fill(255, 0, 0); }
else if (mouseX < 2*width/3) { fill(0, 255, 0); }
else { fill(0, 0, 255); }
ellipse(width/2, height/2, 80, 80);
}
Condicions amb el ratolí: botons i zones
A p5.js v2, mouseButton és un objecte amb propietats booleanes (.left, .right, .center).
function draw() {
if (mouseIsPressed) {
if (mouseButton.left) { stroke(0, 0, 255); strokeWeight(4); }
else if (mouseButton.right) { stroke(255, 0, 0); strokeWeight(10); }
line(pmouseX, pmouseY, mouseX, mouseY);
}
}
Condicions amb el teclat: keyIsDown()
Amb keyIsDown(codiTecla) podem comprovar si una tecla concreta està premuda en aquell instant.
if (keyIsDown(LEFT_ARROW)) { x -= 2; }
else if (keyIsDown(RIGHT_ARROW)) { x += 2; }
if (keyIsDown(SHIFT)) { colorCercle = color(255, 100, 100); }
else { colorCercle = color(100, 150, 255); }
Condicions amb el temps: frameCount i intervals
frameCount compta els fotogrames des de l'inici. Podem utilitzar-lo amb l'operador mòdul (%) per activar coses cada cert temps.
function draw() {
background(colorFons);
if (frameCount % 120 === 0) {
colorFons = color(random(255), random(255), random(255));
}
}
Exemples creatius pas a pas
Clima interactiu amb condicions
El ratolí controla el "clima": a l'esquerra plou, al centre està ennuvolat, a la dreta fa sol.
if (mouseX < width/3) { /* Pluja */ }
else if (mouseX < 2*width/3) { /* Ennuvolat */ }
else { /* Sol */ }
Partícules amb estats
Un sistema de partícules canvia de comportament segons la zona del ratolí o les tecles premudes.
if (mouseIsPressed && mouseButton.left) { /* Mode explosió */ }
else if (keyIsDown(32)) { /* Mode calma: esborrar */ }
// Mode normal: les partícules es mouen sense intervenció
Consells per dominar les condicions
- Utilitza operadors lògics:
&&(i),||(o),!(no) per combinar condicions. - Evita condicions massa complexes: si un
ifté moltes branques, considera usar una variable d'estat. - Pensa en els límits: assegura't que totes les situacions possibles estiguin cobertes per alguna branca.
- Prova les condicions límit: què passa si
mouseX === width/2exactament? - Utilitza
constrain()per assegurar que valors es mantenen dins de rangs abans d'avaluar condicions.
Exercicis per practicar
- Crea un semàfor interactiu: un cercle que canvia de color (vermell, groc, verd) cada cop que es prem la barra espaiadora.
- Implementa un joc de reflexos: un quadrat apareix en una posició aleatòria i, si el ratolí hi és a sobre, suma un punt; si no, el perd.
- Dissenya un selector de paleta: amb les tecles 1, 2, 3 es carreguen paletes de colors predefinides per pintar.
- Fes un rellotge visual: utilitza
hour(),minute(),second()i condicions perquè el fons canviï de color segons l'hora del dia (matí, tarda, nit). - Repte: Crea un sistema de partícules amb zones: divideix el llenç en 4 quadrants. Segons el quadrant on es faci clic, les partícules es comporten diferent (velocitat, color, forma).
Reflexió artística
Les condicions són el cervell del teu sketch. Amb elles, l'obra deixa de ser una seqüència fixa i es converteix en un sistema viu que observa, decideix i reacciona. Cada if és una pregunta que fas al món: "és de nit?", "ha passat el ratolí per aquí?", "s'ha premut la tecla màgica?". En l'art generatiu, la bellesa sovint emergeix de la combinació de regles simples. Les condicions et permeten crear aquestes regles: "si la partícula toca la vora, rebota", "si el so és fort, pinta de vermell". Són els fonaments de la simulació, el joc i la interactivitat. Experimenta amb diferents condicions, combina-les amb bucles i random, i observa com el teu sketch comença a tenir "personalitat".
Mini-projecte del Tema 20
Crea un "Ecosistema interactiu" amb les següents característiques:
- Utilitza almenys tres estructures condicionals (
if/else if/else) en diferents parts del codi. - Fes que l'ecosistema reaccioni al ratolí (posició o clics) i al teclat (almenys dues tecles diferents).
- Inclou almenys dos "estats" visuals clarament diferenciats (per exemple, dia/nit, calma/tempesta, estiu/hivern).
- Utilitza partícules o elements mòbils que es comportin diferent segons les condicions.
- Opcional: afegeix canvis cíclics basats en temps (
frameCountomillis()) que alternin automàticament entre estats cada cert interval.