• fullscreen
  • Boton.pde
  • _17_clasesDiametro.pde
  • class Boton{
      float diametro;
      int col;
      float x;
      float y;
      float angulo;
    
      float diametroObj;
      int colObj;
      float xObj;
      float yObj;
      float anguloObj;
      
      Boton(float _x, float _y, int _col){
        x = _x;
        xObj = _x;
        y = _y;
        yObj = _y;  
        diametro = 50;
        diametroObj = diametro;
        col = _col;
        colObj = _col;
      }
      
      void actualizate(){
        diametro = lerp(diametro, diametroObj, 0.2);
        x = lerp(x, xObj, 0.2);
        y = lerp(y, yObj, 0.2);
        angulo = lerp(angulo, anguloObj, 0.2);
        col = lerpColor(col, colObj, 0.6);
      }
      
      void dibujate(){
        fill(col);
        stroke(0);
        strokeWeight(4);
    
        pushMatrix();
        translate(x, y);
        rotate(angulo);
    
        ellipse(0, 0, diametro, diametro);
        line(0, 0, diametro/2, 0);
        popMatrix();
      }
    }
    
    // define la cantidad de elementos del gusano
    int copias = 20;
    
    // colores
    boolean cogido = false;
    color colorCogido;
    color colorSobre;
    color colorNormal;
    
    // defino 2 arrays para guardar las posiciones
    Boton[] botones = new Boton[copias];
    
    void setup () {
      size(500, 500);
      smooth();
    
      colorCogido = color(#F5332C);
      colorSobre = color(#FFCD03);
      colorNormal = color(#668CBF);
    
      // llamo a la funcion que define la pos
      // de salida de los cuadros
      creaBotones();
    }
    
    void draw () {
      background(255);
    
      // actualizo las posiciones y angulos
      // de los botones
      actualizaBotones();
      
      // dibujo los botones
      dibujaBotones();
    }
    
    void mousePressed(){
    
      if (dist(mouseX, mouseY, botones[0].x, botones[0].y) < botones[0].diametro/2) {
        cogido = true;
      }
    }
    
    void mouseReleased(){
      cogido = false;
    }
    
    void creaBotones() {  
      // recorro el array y relleno cada miembro con un valor
      for (int i=0; i<copias; i++) {
        botones[i] = new Boton(width/2, height/2, colorNormal);
      }
    }
    
    
    void actualizaBotones() {
      // El primero se actualiza de una forma
      if (cogido) {
        botones[0].xObj = mouseX;
        botones[0].yObj = mouseY;
        botones[0].anguloObj = atan2(mouseY - botones[0].y, mouseX - botones[0].x);
        botones[0].colObj = colorCogido;
        botones[0].diametroObj = map(dist(mouseX, mouseY, pmouseX, pmouseY), 0, 100, 50, 300);
      } else {
        botones[0].diametroObj = 50;
        if (dist(mouseX, mouseY, botones[0].x, botones[0].y) < botones[0].diametro/2) {
          botones[0].colObj = colorSobre;
        } else {
          botones[0].colObj = colorNormal;
        }
      }
      
      // Para el resto de cuadrados
      for (int i=1; i<copias; i++) {
        botones[i].diametroObj = botones[i-1].diametro;
        botones[i].xObj = botones[i-1].x;
        botones[i].yObj = botones[i-1].y;
        botones[i].anguloObj = botones[i-1].angulo;
        botones[i].colObj = botones[i-1].col;
      }
      
      for (int i=0; i<copias; i++) {
        botones[i].actualizate();
      }
    }
    
    void dibujaBotones() {
      for (int i=copias-1; i>=0; i--) {
        botones[i].dibujate();
      }
    }
    

    code

    tweaks (0)

    about this sketch

    This sketch is running as Java applet, exported from Processing.

    license

    advertisement

    Ricard Marxer Piñón

    Gusano

    Add to Faves Me Likey@! 4
    You must login/register to add this sketch to your favorites.

    You need to login/register to comment.