Abstracción: pelota que rebota

April 15, 2008 – 10:45 pm

En este ejercicio vemos como adaptar el ejercicio de la pelota que rebota a una verison OO.

Cuando trabajando con objetos, en Processing es conveniente dedicar a cada clase un tab nuevo. Para hacer esto, basta con cliquear en el botón de tabs situado a la derecha de los tabs:

Tab button in Processing Editor

Después seleccionamos la opción New Tab y le daremos el nombre de la clase que vamos a crear (en nuestro caso este sera Pelota).

El contenido de esta clase sera el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Pelota{
  float posY;
  float velY;
  float gravY;
  int radio;
 
  // Este metodo consiste en la creacion de nuestro objeto
  Pelota(){
    this.posY = 0;
    this.velY = 0;
    this.gravY = 0.8;
    this.radio = 5;
  } 
 
  // Este metodo consiste en el comportamiento de nuestro objeto
  void actualizate(){
    this.velY += this.gravY;
    this.posY += this.velY;
 
    // Esta vez queremos que rebote cuando
    // el borde de la pelota se pase del suelo
    if ((this.posY >= height - this.radio)){
      // Para evitar que la pelota se enganche en el suelo
      // cuando esta se pasa del suelo 
      // la ponemos dentro de la escena de nuevo
      this.posY = height - this.radio;
 
      // Cada vez que la pelota rebota
      // vuelve solo con un 90% de su velocidad
      this.velY = -this.velY*0.9;
 
    }
    else if(this.posY <= 0 + this.radio){
      this.posY = 0 + this.radio;
      this.velY = -this.velY*0.9;
    }
  }
 
  // Este metodo consiste en la visualizacion de nuestro objeto
  void dibujate(){
    ellipse(width/2, this.posY, this.radio*2, this.radio*2);
  }
}

Vemos que hemos hecho uso de la variable this. Esta variable se refiere a la instancia misma. Así cuando decimos this.posY nos referimos a la variable miembro posY de la instancia de la cual llamamos actualizate() y dibujate(), y no de todas las otras instancias que podamos haber creado.

Seguidamente editaremos el setup() y draw() de nuestro sketch de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Pelota miPelota;
 
void setup(){
  size(100,100);
  stroke(0);
  fill(0);
  smooth();
 
  miPelota = new Pelota();
}
 
void draw(){
  miPelota.actualizate();
 
  background(255);
  miPelota.dibujate();
}

Post a Comment