collide some rectangles created from array to do stuff

Hi. well first thanks to koogs for the earlier answer, well I continue with the same program an I like to collide the rects that I generate in array, well the rect can move with the mousePressed function and can change orientation whith mouseButton RIGHT, I was seen on other examples how to collide two rects but when I make the rects in array I feel confused runing my code.. because i cant find the form to collide the 16 rects that I generate in array. i wish that when one rect collide with other no move anymore the rects collided or do other stuff change color etc. well here is my processing code.

moveBox[] box=new moveBox[16];//declare de object

void setup() {
  size(800, 800);
  rectMode(RADIUS);//de esta forma se consigue mover el cuadro desde el centro del mismo.
  for (int i=0;i<box.length;i++) {
    box[i] =new moveBox(25+i*50, 100, 15, 30);
  }
}
void draw() {
  background(0);
  for (int i=0;i<box.length;i++) {
    box[i].display();
    box[i].move();
  }
}
void mousePressed() {
  if (mouseButton == RIGHT) {
    for (int i=0;i<box.length;i++) {
      box[i].turn();
    }
  }
}
class moveBox {
  int px;//posicion en x
  int py;//posicion en y
  int wid;//ancho del bloque
  int hei;//largo del bloque

  int xoffset=0;//es es para que cuando hagamos click en el cuadro lo tome desde ahi y no traslade la cordenada a un punto no deseado antes de mover el mouse
  int yoffset=0;
  int t;//esto fija solamente la transparencia del objeto
  int s;//esto es para colorear la linea de contorno del objeto al moverlo


  moveBox(int PX, int PY, int WID, int HEI) {//constructor
    px=PX;//parametros que se podran alterar para cada objero
    py=PY;//
    wid=WID;//ancho
    hei=HEI;//largo
  }
  void display() {//metodo que muestra el objeto en pantalla con los atributos deseados
    stroke(s);
    strokeJoin(ROUND);
    fill(255, 255, 0, t);
    rect(px, py, wid, hei);
    for(int i=0;i<box.length;i++){
    if (rectRectIntersect(box[i].px, box[i].py,box[i].px+box[i].wid, box[i].py+box[i].hei, 
                          box[1].px, box[1].py,box[1].px+box[1].wid, box[1].py+box[1].hei) == true) {
     // mouseX=px;
     // mouseY=py;
    }
  }
  }

  void move() {//metodo para mover el objeto con las condiciones de que solo al estar dentro del cuadro este puede moverse con click
    if (mouseButton==LEFT&&(mouseX>px-wid)&&(mouseX<px+wid)&&
      (mouseY>py-hei)&&(mouseY<py+hei)) {
      px=mouseX-xoffset;//al hacer click la coordenada x de la figura se resta de 0 para evitar movimiento no deseado
      py=mouseY-yoffset;// igual pero con y
      s=255;
      t=100;
    } 
    else {
      xoffset=mouseX-px;//al soltar el click, la figura permanece en las coordenadas que el mouse tiene y evita movimiento no deseado
      yoffset=mouseY-py;//igual pero con coordenada y

        t=250; //cambiar de transparencia a color opaco
      s=20;//cambiar el contorno de la figura
    }
  }
  void turn() {
    if (mouseButton==RIGHT&&(mouseX>px-wid)&&(mouseX<px+wid)&&
      (mouseY>py-hei)&&(mouseY<py+hei)) {    
      wid=wid+hei;//algoritmo para intercambiar los valores entre wid y hei
      hei=wid-hei;
      wid=wid-hei;
    }
  }
  boolean rectRectIntersect(float left, float top, float right, float bottom, 
  float otherLeft, float otherTop, float otherRight, float otherBottom) {
    return !(left > otherRight || right < otherLeft || top > otherBottom || bottom < otherTop);
  }
}
Tagged:
Sign In or Register to comment.