4.4. Art cinètic i art òptic
4.4.4. Exemple: creem moviment sobre una obra de Georg Nees
Ja vam treballar George Nees (1926-2016) en el repte 2. Fou un dels primers investigadors, teòrics i artistes de l’art digital. Se’l considera un pioner i va ser el primer a exposar dibuixos generats per ordinador a la Universitat de Stuttgart el febrer de 1965 amb peces de Friedrich Nake i Michael Noll (consulteu l’apartat sobre art computacional: 4.1.3. Primers gràfics per computadora: de l’experimentació a l’exhibició).
En aquest exemple treballarem a partir de la seva obra Schotter i li donarem vida amb Snap!. Per a fer-ho, ens inspirarem en el treball de Selim Tezel, que després d’escoltar una conferència de Joachim Wedekind va decidir crear una revisió de l’obra de Nees però amb moviment, com si fos una cascada de quadrats contínua. Tezel va utilitzar Scratch com a llenguatge de programació, però nosaltres ho farem amb Snap!.
L’exemple ens servirà per a explicar què és un clon i com els podem fer servir quan programem amb Snap!. Aquí teniu el codi del programa sencer que analitzarem ara. I aquest és l’efecte final que volem aconseguir:
Tal com veieu, en l’obra de Nees tenim un munt de quadrats. En el nostre programa només en tindrem un de sol, del qual anirem fent clons. Els personatges d’Snap! poden crear un clon de si mateixos en qualsevol moment del programa, i podem definir exactament què faran aquests clons quan siguin creats. Hi ha dues instruccions bàsiques per a fer-ho: «crea un clon de mi mateix» i «quan una còpia meva comenci».
Centrant-nos en el nostre exemple, necessitem un personatge que sigui un quadrat (podem dibuixar-lo amb el Paint de l’Snap! o obrir una imatge d’un quadrat). Per començar, crearem un nou bloc anomenat «MakeRow», que ens servirà per a crear una fila de deu clons. Ho farem així:
Un cop fet això, podem construir el programa principal, que consisteix en un bucle «per sempre» en el qual anem creant files de clons i tornem a la posició inicial.
I ara queda per programar la part més important, que és la que diu a cada clon com ha de comportar-se.
Fixeu-vos en el comportament de cada quadrat en l’animació de dalt. Senzillament es van movent cap a baix fins que desapareixen a partir d’una certa alçada. I, mentre baixen, primer només van girant aleatòriament uns quants graus, però a partir d’una alçada determinada també comencen a fer petits desplaçaments aleatoris a part dels girs. Ho podem fer amb aquest programa:
Així, doncs, cada quadrat repeteix totes aquestes instruccions quan neix fins que arriba a una posició Y per sota de –140. Llavors s’autoelimina mitjançant la instrucció «esborra aquest clon».
En el «repeteix», a cada iteració sumem un valor negatiu a la Y per tal que el quadrat vagi baixant. Aquest valor que sumem a Y el tenim guardat dins la variable «velocity», la qual anem incrementant a cada iteració perquè vagi baixant així cada cop més ràpid. La resta de blocs són petits girs i desplaçaments aleatoris, que s’accentuen quan el quadrat arriba a una posició Y per sota de 0.
Executant el programa amb el codi que hem vist fins ara, la sortida per pantalla seria com la següent. Les files estan inclinades, i aquest és un efecte que hauríem de corregir. El motiu perquè això passa és que quan un quadrat neix no s’espera que s’hagi completat tota la fila per a començar a baixar. I, per tant, com més a l’esquerra més avall són els quadrats, perquè ha passat més temps des que han estat creats i han tingut més temps per a baixar.
Podem corregir aquest problema afegint una variable «down», que inicialitzem amb un «no» just abans de crear la fila i actualitzem amb un «yes» just després d’acabar la fila. Ara només haurem d’afegir una instrucció «espera fins a down = yes» just abans del «repeteix» que controla el comportament de cada clon. Així, ens assegurem que els quadrats no es comencen a moure fins que hem acabat de construir la fila sencera.