Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-11-08 04:14:43 Méthode distance.

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Méthode distance.



Bonjour.
Je suis un peu perdu ;dans le programme suivant j'aimerais que les rectangles et les balles changent de couleurs en cas de collisions .Le problème se trouve dans la méthode distance dans la classe Balle je ne trouve pas la syntaxe pour changer la couleur du rectangle .

  void distance(Rect[] rect){ 
      for(int i=0;i<rect.length;i++){ 
      float distance=position.dist(rect[i].position); 
      if(distance<20){ 
      etat=true; 
  ici ?quelque chose devant etat?
     

Code (P5) :

int nb=10;
Balle[]balle=new Balle[nb];
Rect[]rect=new Rect[nb];
void setup(){
  size(600,600);
  for(int i=0;i<nb;i++){
    balle[i]=new Balle();
    rect[i]=new Rect();
  }
}
  void draw(){
    background(100);
    for(int i=0;i<nb;i++){
    balle[i].position();
    balle[i].rebond();
    balle[i].display();
   balle[i].distance(rect);
    rect[i].position();
    rect[i].rebond();
    rect[i].display();
    }
    for(int i=0;i<nb;i++){
      for(int j=i+1;j<nb;j++){
      balle[i].change(balle[j]);
      rect[i].change(rect[j]);
      
  }
  }
  }
  class Balle{
    PVector position;
    PVector deplacement;
    boolean etat;
    Balle(){
      position=new PVector(random(0,width),random(0,height));
      deplacement=new PVector(random(-2,2),random(-2,2));
    }
    void position(){
      position.add(deplacement);
    }
    void rebond(){
      if(position.x<0||position.x>width){
        deplacement.x=deplacement.x*-1;
      }
      if(position.y<0||position.y>height){
        deplacement.y=deplacement.y*-1;
      }
    }
    void change(Balle j){
      float distance=position.dist(j.position);
      if(distance<20){
        etat=true;
        j.etat=true;
     
        
      }
    }
    void distance(Rect[] rect){
      for(int i=0;i<rect.length;i++){
      float distance=position.dist(rect[i].position);
      if(distance<20){
      etat=true;

   
    }
    }
    }
    void display(){
      if(etat){
        fill(255,255,0);
      }
      else{
        fill(255);
      }
      ellipse(position.x,position.y,20,20);
  }
  }
  class Rect{
    PVector position;
    PVector deplacement;
    boolean etat;
    Rect(){
      position=new PVector(random(0,width),random(0,height));
      deplacement=new PVector(random(-2,2),random(-2,2));
    }
    void position(){
      position.add(deplacement);
    }
    void rebond(){
      if(position.x<0||position.x>width){
        deplacement.x=deplacement.x*-1;
      }
      if(position.y<0||position.y>height){
        deplacement.y=deplacement.y*-1;
      }
    }
    void change(Rect j){
      float distance=position.dist(j.position);
      if(distance<20){
        etat=true;
        j.etat=true;
     
        
      }
    }
    void display(){
      if(etat){
        fill(0,255,0);
      }
      else{
        fill(0);
      }
      rect(position.x,position.y,30,20);
  }
  }

Hors ligne

 

#2 2014-11-08 12:42:52 Re : Méthode distance.

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Méthode distance.



Bonjour,

Tu peux accéder comme tu l'as fait avec la variable position :

  void distance(Rect[] rect) {  
    for (int i=0; i<rect.length; i++) {  
      float distance=position.dist(rect[i].position);  
      if (distance<20) {  
        etat=true;
        rect[i].etat = true;
      }
    }
  }

De plus, il faudrait mettre dans le setup(), pour que la position d'un rectangle soit en son centre :

rectMode(CENTER);

Hors ligne

 

#3 2014-11-09 06:06:54 Re : Méthode distance.

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

Re: Méthode distance.



Je te remercie pour les conseils et la syntaxe ça fonctionne super bien;maintenant je peu faire des interactions entres les classes ce que je ne savais pas faire.Mais comment fais tu pour savoir toutes ces syntaxes.
Merci.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024