Pinturas aleatorias con processing.js
Siguiendo con las entregas sobre la utilización de la librería processing.js, vamos a abordar la implementación de un programa sencillo en el que utilizamos la interacción con el ratón y la función random() para generar cuadros abstractos aleatorios. Además, introduciremos el concepto de semáforo que resulta importante para la gestión del flujo del programa y que tiene un uso similar al de un interruptor que permite o evita la ejecución de cierto código dentro del programa.
Vamos a inicializar nuestro semáforo repinta a valor 1 y definimos los valores iniciales en la función setup:
var repinta = 1; void setup(){ size(800,600); background(0,0,0); cursor(CROSS); };
Ahora definimos dentro de la función draw, nuestra función fundamental dibuixar_formes() condicionada por el valor del semáforo. De este modo, solamente se procesará el repintado de pantalla cuando la variable repinta esté a valor 1 (semáforo en verde) mientras que cuando su valor sea 0 no se procesará el código (semáforo en rojo).
draw = function(){ if (repinta===1){ dibuixar_formes(); } };
La función principal se encarga de generar un conjunto de formas en posiciones, tamaños y colores aleatorios mediante un bucle. La función random() resulta clave en la generación de valores aleatorios entre un rango inferior y uno superior. Además, usamos la función módulo % para cambiar de forma dibujada en función del resto de la división entre la variable de bucle i y el valor 3. Finalmente, una vez dibujada la pantalla y para evitar repintados sucesivos en las llamadas draw recurrentes, asignamos a la variable repinta el valor 0 colocando de facto el semáforo en rojo.
void dibuixar_formes(){ background(0,0,0); //Crear cuadro for(var i=0; i<=100; i++){ fill(floor(random(0,255)),floor(random(0,255)),floor(random(0,255))); noStroke(); if (i % 3 == 0){ ellipse(random(0,800),random(0,600),random(10,200),random(10,200)); } if (i % 3 == 1){ rect(random(0,800),random(0,600),random(10,200),random(10,200)); } stroke(floor(random(0,255)),floor(random(0,255)),floor(random(0,255))); if (i % 3 == 2){ line(random(0,800),random(0,600),random(0,800),random(0,600)); } } //Prepara nova pantalla repinta=0; };
Por último, vamos a utilizar la función especial mouseClicked() para controlar a través del ratón un evento que pueda ser desencadenado por el usuario y que permita activar de nuevo la variable repinta para poder generar una nueva pantalla de formas aleatorias.
void mouseClicked(){ if (repinta === 0) { repinta = 1;} };
En conclusión, hemos realizado una sencilla aplicación en la que interactuamos a través del clic del ratón, experimentamos con las funciones random() y %, y vemos en acción el uso de una variable semáforo para regular la ejecución de código de programa. Como es habitual, en los enlaces dispones de la implementación y del código fuente necesario para replicar los ejemplos utilizados.