Crear una secuencia

sec
Hasta ahora sólo hemos escrito programas que ejecutan una o varias funciones, a veces en loop (como animación) y a veces de una vez (como imagen estática). También podemos hacer que un programa conste de varias secuencias de funciones que se ejecutan en un orden y un tiempo determinados.

Para ello usamos condicionales en los que vinculamos la ejecución de una función personalizada a que la animación alcance un fotograma o un tiempo concretos:

  1. void setup(){
  2.     size(300, 300)
  3. }
  4.  
  5. void draw(){
  6.     //la variable 'm' toma el valor de los milisegundos transcurridos
  7.     int m = millis();
  8.     if(m < 2000){
  9.         escena1();
  10.     } else if(m < 4000){
  11.         escena2();
  12.     } else if(m < 6000){
  13.         escena3();
  14.     } else {
  15.         noLoop();
  16.     }
  17. }

Los contenidos de cada escena pueden ser los que decidas. Dejo ahí abajo un ejemplo en el que cada escena muestra un patrón animado de colores.

  1. float contador = 0;
  2.  
  3. void setup() {
  4.   size(400, 300);
  5.   noFill();
  6.   strokeWeight(3);
  7.   colorMode(HSB, 100);
  8.   background(0);
  9.   frameRate(1);
  10. }
  11.  
  12. void draw() {
  13.   int m =millis();
  14.   if (contador < 12) {
  15.     escena1();
  16.   }
  17.   else if (contador < 24) {
  18.     escena2();
  19.   }
  20.   else if (contador < 36) {
  21.     escena3();
  22.   }
  23.   else {
  24.     contador = 0;
  25.   }
  26.   contador++;
  27. }
  28.  
  29. void escena1() {
  30.   loadPixels();  
  31.   // Loop through every pixel column
  32.   for (int x = 0; x < width; x++) {
  33.     // Loop through every pixel row
  34.     for (int y = 0; y < height; y++) {
  35.       // Use the formula to find the 1D location
  36.       int loc = x + y * width;
  37.       float h = noise((x-y*sin(millis()/1000)*cos(y/10))/10)*100;
  38.       float s = 50 + noise((x-y*sin(millis()/1000))/10)*50;
  39.       float b = noise((x-y*sin(millis()/1000)*cos(y))/10)*100;
  40.       pixels[loc] = color(h, s, b);
  41.     }
  42.   }
  43.   updatePixels();
  44.   fill(100);
  45.   rect(15, 15, 100, 20);
  46.   fill(#FF1AFC);
  47.   text("Escena 1", 20, 30);
  48. }
  49.  
  50. void escena2() {
  51.   loadPixels();  
  52.   // Loop through every pixel column
  53.   for (int x = 0; x < width; x++) {
  54.     // Loop through every pixel row
  55.     for (int y = 0; y < height; y++) {
  56.       // Use the formula to find the 1D location
  57.       int loc = x + y * width;
  58.       float h = 50 + noise((x-y*sin(millis()/1000))/10)*50;
  59.       float s = noise((x-y*sin(millis()/1000)*cos(y/10))/10)*100;
  60.       float b = noise((x-y*sin(millis()/1000)*cos(y))/10)*100;
  61.       pixels[loc] = color(h, s, b);
  62.     }
  63.   }
  64.   updatePixels();
  65.   fill(100);
  66.   rect(15, 15, 100, 20);
  67.   fill(#FF1AFC);
  68.   text("Escena 2", 20, 30);
  69. }
  70.  
  71. void escena3() {
  72.   loadPixels();  
  73.   // Loop through every pixel column
  74.   for (int x = 0; x < width; x++) {
  75.     // Loop through every pixel row
  76.     for (int y = 0; y < height; y++) {
  77.       // Use the formula to find the 1D location
  78.       int loc = x + y * width;
  79.       float h = 25 + noise((x+y*sin(millis()/1000)+sin(y)))*50;
  80.       float s = noise((x-y*sin(millis()/1000)*cos(y))/10)*100;
  81.       float b = noise((x-y*sin(millis()/1000)*cos(y/10))/10)*100;
  82.       pixels[loc] = color(h, s, b);
  83.     }
  84.   }
  85.   updatePixels();
  86.   fill(100);
  87.   rect(15, 15, 100, 20);
  88.   fill(#FF1AFC);
  89.   text("Escena 3", 20, 30);
  90. }

Leave a Comment.