domingo, 8 de julio de 2012

Objetos - class


Trabajar con class es un poco molesto, pero necesario... después de entenderlo uno comienza a disfrutarlo.
Voy a crear una clase Pelota. Iré paso a paso.


-- testApp.h
#define CANTIDAD 10   // cantidad de instancias de la classe

class testApp : public ofBaseApp{
Pelota ball[CANTIDAD]; //  la clase Pelota tiene 10 instancias que se llaman ball
}

-- testApp.cpp
testApp.cpp :: update
for (int i = 0; i < CANTIDAD; i++){
      ball[i].calcularFisica();  //  desde aquí calculo la física en Pelota para cada una de las instancias
}

testApp :: draw(){
for (int i = 0; i < CANTIDAD ; i++){
       ball[i].dibujar();         // desde aquí dibujo en Pelota cada una de las instancias
}


-- pelota.h
#ifndef PELOTA_H
#define PELOTA_H
#include "ofMain.h"
class Pelota{
public:
    Pelota();
    void    dibujar(); // defino la función dibujar en Pelota
    ofPoint pos; // defino el ofPoint pos para la posición de Pelota (pos.x, pos.y)
    ofPoint vel; // defino el ofPoint vel para la velocidad de Pelota (vel.x, vel.y)
    ofPoint acc; // defino el ofPoint acc para la aceleración de Pelota (acc.x, acc.y)
    ofColor color; // defino el ofColor color para el colorde Pelota
    int radio; // defino radio de Pelota que luego será el radio de cada una de las instancias
};


-- pelota.cpp
#include "Pelota.h"
Pelota::Pelota(){ // acá se dan los valores por default. para cada instancia los valores rnd varían
    color.set(ofRandom(100, 255), ofRandom(100, 255), ofRandom(100, 255));
    radio = ofRandom(1, 60);
    pos.set(ofRandom(450, 650),ofRandom(50, 300)); // posición en x, y
    acc.set(0, 0); // aceleración
    vel.set(ofRandom(-10, 10), ofRandom(-10, 10)); // velocidad en x, y
}

void Pelota::calcularFisica(){ // esto es lo interesante de hacer ecuaciones con los ofPoint
    vel += acc; // vel.x = vel.x + acc.x; vel.y = vel.y + acc.y;
    vel *= 0.98;  // vel.y = vel.y * 0.98; vel.y = vel.y *0.98;
    pos += vel; // pos.x = pos.x + vel.x; pos.y = pos.y + vel.y;
    acc *= 0; // acc.x = acc.x * 0; acc.y = acc.y * 0;
}

void Pelota::dibujar(){
    ofFill(); // relleno
    ofSetColor(color); // seteo el color
    ofCircle(pos.x, pos.y, radio); // dibujo un círculo en x, y con radio

    ofSetLineWidth(1); // ancho de línea 1
    ofNoFill(); // sin releno
    ofSetColor(0, 0, 0); // color negro
    ofCircle(pos.x, pos.y, radio);  // solo va a dibujar el contorno del círculo
}

no están desarrollados los rebotes porque ya están en videos anteriores

No hay comentarios:

Publicar un comentario