PROYECTO 2 - Reloj de Post-it
En este miniproyecto vamos a crear un reloj donde los números estarán hechos a partir de fotografías de notas adhesivas o Post-it.
1.- Inserta una imagen en tu programa.
En primer lugar vamos a aprender a insertar una imagen en tu
programa. Este sketch abre una foto desde la ubicación donde este la foto. En
este caso debemos poner la foto en la carpeta del sketch.
PImage
im;void
setup() { size(400,
400); // Hacemos el programa del tamaño de la imagen im
= loadImage("foto.jpg"); // Nombre de la imagen}void
draw() { image(im,
0, 0); // Para mostrar la imagen en la pantalla, coordenadas 0, 0}
Nuevos comandos:
PImage: Un tipo de datos que puede contener una imagen.loadImage(image file): Carga la imagenimage filelocalizada dentro del directorio actual del sketch.image filedebe escribirse exactamente igual que con el nombre del fichero. Mira más abajo cómo colocar la imagen en la carpeta correcta.image(imageName, x, y): Muestra la PImageimageNameen las coordenadasx,y. La esquina superior izquierda es el eje de coordenadas.
2.- Añadir imágenes
Para que el programa tenga acceso a la imagen, debes arrastrar el fichero de la imagen en el IDE de Processing, como muestra la siguiente captura:Cuando ejecutes el programa, la imagen de abajo es lo que deberias ver, un collage con cuatro Post-its como imagen de fondo para tu ventana de programa:
3.- Mostrando dos imágenes
Para poner dos imágenes una al lado de la otra, debes declarar una variable con distinto nombre pero del mismo tipoPImage y cargar la segunda
imagen en el programa. Deberás ajustar las coordenadas de esta segunda imagen.PImage im;PImage im2;void setup() { size(800, 400); // Hacemos el programa dos veces el tamaño de la imagen en ancho im = loadImage("foto.jpg"); im2 = loadImage("foto2.jpg"); // Nombre de la segunda imagen}void draw() { image(im, 0, 0); image(im2, 400, 0); // Para mostrar la segunda imagen en la pantalla, coordenadas 400, 0}
Vamos a experimentar añadiendo otras imágenes:
PImage im;PImage im2;void setup() { size(800, 400); // Hacemos el programa dos veces el tamaño de la imagen en ancho im = loadImage("balon.jpg"); im2 = loadImage("tenis.jpg"); // Nombre de la segunda imagen}void draw() { image(im, 0, 0); image(im2, 400, 0); // Para mostrar la segunda imagen en la pantalla, coordenadas 400, 0}4.- Arrays
Cuando trabajamos con muchas imágenes podemos utilizar algo llamado arrays que permiten un acceso más fácil a ellas
Los arrays pueden ser de un cierto tipo como entero o
int o
una cadena como String.
El máximo número de variables que pueden almacenar debe ser declarado con el
array – 3 en el ejemplo de arriba. El siguiente programa, que es una
modificación del anterior, muestra como usar un array del tipo PImage para
almacenar dos imágenes.
PImage im[] = new PImage[2];
void setup() {
size(800, 400);
// La primera
imagen va a la primera posicion del array img[]
im[0] =
loadImage("foto.jpg");
// La segunda
imagen va a la segunda posicion del array
im[1] = loadImage("foto2.jpg");
}
void draw() {
image(im[0], 0, 0);
image(im[1],
400, 0);
}
Nuevos comandos:
- La declaración de las
imágenes es un poco diferente:
PImage im[] = new PImage[2], esto significa que declaramos un array del tipoPImagecon dos bloques (o compartimentos) de datos. - Cuando mostramos y cargamos
las imágenes, usamos
img[0], para la primera posición del array, yimg[1], para la segunda.
5.- Usando dos Arrays
Para en adelante simplificar la asignación de las variables imagen, el truco es almacenar los nombres de todas las imágenes en un array de strings (cadenas de texto). Aquí un ejemplo:PImage im[] = new PImage[2];
String imFile[] = {"foto.jpg", "foto2.jpg"};
// Array de nombres de ficherovoid setup() { size(800, 400); im[0] = loadImage(imFile[0]); // Primer fichero a la
funcion 'loadImage()' im[1] = loadImage(imFile[1]); // Segundo fichero}void draw() { image(im[0], 0, 0); image(im[1], 400, 0); }6.- El bucle for()
En este paso aumentaremos el número de imágenes que se muestran de 2 a 4. Todavía utilizaremos los 2 arrays de los pasos anteriores, pero para hacer el código más eficiente incluso, introduciremos una cosa nueva: el buclefor().
Esta es una de las funciones más prácticas y usadas en programación. Hace
exactamente lo que parece, iterar, al igual que draw().
Veamos un ejemplo para seguir explicando como funciona.PImage im[] = new PImage[4];
// Haz tu array mas grande para que le quepan 4 imagenesString imFile[] = {"postit.jpg", "peninsula.jpg",
"tortilla.jpg", "banana.jpg"}; void setup() { size(800,
800); // Haz tu programa mas grande para acomodar todas las
imagenes for (int i = 0; i < 4; i = i +
1) { im[i] =
loadImage(imFile[i]); // Carga la imagen segun el contador 'i' }}void draw() { image(im[0], 0, 0); // Muestra las imagenes image(im[1], 400, 0); image(im[2], 0, 400); image(im[3], 400, 400);
Con estos comandos podemos abrir más imágenes, en
este caso podemos abrir hasta 4 imágenes.
Nuevos comandos:
for(initiator; test; update){ statements }: Esta función permite repetir una pieza de código tantas veces como necesites. La primera cosa que sucede dentro delfor()es la inicialización,initiator.En este ejemplo esta declaración es un entero,i. Luego comprueba sitestes verdadero o falso, tal y como hicimos con elifen el proyecto anterior, ¿recuerdas?. En este ejemplotestcomprueba siies menor que 4. Si así es, el código entre llaves se ejecutará. A continuación, lo que ocurre es elupdate, en este caso se trata de incrementariuna unidad. Después,testse comprueba de nuevo y si nuevamente es cierto, se repite lo anterior. Puesto que siempre actualizamos añadiendo 1 ai, en algún momentoiserá igual que 4, lo que significa quetestserá falsa (4 no es menor que 4). En ese momento, se abandonará el bucle.
7.- Múltiples imágenes
Puesto que el objetivo de este programa es crear un reloj, el siguiente paso es utilizar diferentes imágenes que representen los números y usarlas en nuestro programa. Para tu conveniencia, te damos una serie de imágenes hechas con notas de Post-It.PImage im[] = new PImage[10];
// Array para 10 imagenesString imFile[] = {"0.jpg", "1.jpg",
"2.jpg", "3.jpg", "4.jpg", "5.jpg",
"6.jpg", "7.jpg", "8.jpg", "9.jpg"}; void setup() { size(700,
95); // 10 imagenes de 70 pixels de ancho y 95 de alto for (int i = 0; i < 10; i = i
+ 1) { im[i] = loadImage(imFile[i]); }}void draw() { for (int i = 0; i < 10; i = i + 1) { image(im[i],
70 * i, 0); // Muestra las imagenes en secuencia }}
En este programa podemos abrir las 10 imágenes a la vez y
horizontalmente.
8.- El Tiempo
En este paso te enseñaremos como mostrar el tiempo. Ya has aprendido como acceder a diferentes variables del sistema con Processing. Por ejemplo, ya hemos usadomouseX,
mouseY
y frameRate.
Hay variables que podemos utilizar para obtener el tiempo actual; hour (), minute () y second ().
Empecemos con cómo mostrar el tiempo por sólo las horas:PImage im[] = new PImage[10];
// Array para 10 imagenesString imFile[] = {"0.jpg", "1.jpg",
"2.jpg", "3.jpg", "4.jpg", "5.jpg",
"6.jpg", "7.jpg", "8.jpg", "9.jpg"}; void setup() { size(140,
95); // 2 digitos de 70 pixels de ancho y 95 de alto for (int i = 0; i < 10; i = i
+ 1) { im[i] = loadImage(imFile[i]); }}void draw() { int h =
hour();
// Toma la hora del reloj del ordenador y almacenalo en una variable int h_dec =
int(h / 10); // Extrae el digito de mayor peso de la hora
(decenas) int h_uni = h
- h_dec * 10; // Extrae el digito de menor peso de la hora (unidades) image(im[h_dec],
0, 0); // Muestra el digito de las decenas image(im[h_uni],
70, 0); // Muestra el digito de las unidades}Nuevos comandos:
hour(): Devuelve la hora actual como un número de 0 a 23.int(data): Conviertedataa un entero. P.ej.int(2.545)devuelve 2,int(233.9999)devuelve 233 etc.
Como vemos, este programa es capaz de saber qué hora es
gracias a nuestro ordenador, como son las 10, el programa coge los numeros 1 y
0 para formar el numero 10. Es un programa muy interesante pues podemos tener
un reloj a base de imágenes.
9.- El reloj final
Este es el último paso del proyecto. En este paso vamos a añadir los minutos y los segundos a nuestro reloj utilizando el mismo método que en el paso anterior con las horas.
PImage im[] = new PImage[10]; // Array para 10 imagenes
String imFile[] = {"0.jpg",
"1.jpg", "2.jpg", "3.jpg", "4.jpg",
"5.jpg", "6.jpg", "7.jpg", "8.jpg",
"9.jpg"};
void setup() {
size(140, 285); // 6 digitos en tres filas y dos
columnas
for (int i = 0; i < 10; i = i +
1) {
im[i]
= loadImage(imFile[i]);
}
}
void draw() {
int h =
hour();
int
h_dec = int(h / 10);
int
h_uni = h - h_dec * 10;
image(im[h_dec],
0, 0);
image(im[h_uni], 70, 0);
int m = minute(); // Toma los minutos del reloj del
ordenador y almacenalos en una variable
int m_dec = int(m / 10); // Extrae el digito de mayor peso de los
minutos (decenas)
int m_uni = m - m_dec * 10; // Extrae el
digito de menor peso de los minutos (unidades)
image(im[m_dec], 0, 95); // Muestra el digito de las decenas
image(im[m_uni], 70, 95); // Muestra el digito de las unidades
int s = second(); // Toma los segundos del reloj del
ordenador y almacenalos en una variable
int s_dec = int(s / 10); // Extrae el digito de mayor peso de los
segundos (decenas)
int s_uni = s - s_dec * 10; // Extrae el
digito de menor peso de los segundos (unidades)
image(im[s_dec], 0, 190); // Muestra el digito de las decenas
Esto es un reloj a base de imágenes de números, es el proyecto final de nuestro reloj programado para ver la hora con unas simples imágenes. En nuestras funciones, los segundos van cambiando y los minitos y las hora, pues le hemos puesto su retardo correspondiente.
Juntamos el bloque 1 con un poco del dos:
int tiempo = 0;
void setup() {
size(400, 400); // Hacemos el programa del tamaño de la imagen
im = loadImage("tenis.jpg"); // Nombre de la imagen
image(im, 0, 0); // Para mostrar la imagen en la pantalla, coordenadas 0, 0
}
void draw() {
tiempo = tiempo + 1; // Incrementa el tiempo en una unidad
rojo = int(55 * (1 + sin(tiempo * 2 * PI / frameRate / 20))); // Cambia el rojo, repite el color cada 20s
noStroke();
fill(rojo, 0, 0);
ellipse(mouseX, mouseY, 30, 30);
}










No hay comentarios:
Publicar un comentario