Annonce

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


#1 2013-10-21 08:36:01 collisions balle.

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

collisions balle.



bonjour

Il y a encore quelques-choses que je n'es pas comprises dans le sous-programme collision. Entre les positions des balles[i] et les balles de [j];je transmet les données dans le sous-programme collision,
et ensuite je calcul la distance entre deux balles.Mais ça ne fonctionne pas je pense que le problème vient du fait
que j'ai utilisez un vecteur pour le déplacement;mais je ne vois pas pourquoi.

distance= position.dist(j.position); 


Code (P5) :

int nb=10;  
 Balle[]balle=new Balle[nb];  
void setup() {  
  size(800, 700);  
  for (int i=0;i<nb;i++) {  
    balle[i]=new Balle(random(width), random(height),-1,1);  
  }  
}  
 void draw() {  
  background(255);  
  for (int i=0;i<nb;i++) {  
    balle[i].rebondir();  
    balle[i].bouger();  
       }  
  for (int i=0;i<nb;i++) {  
    for (int j = i + 1 ; j < nb; j++) {  
      balle[i].collision(balle[j]); 
       }  
   }
  }  
   class Balle {  
  PVector position;  
 PVector deplacement;
  int rayon;  
     Balle(float px, float py,float dx,float dy) {  
    position = new PVector(px, py);  
    deplacement=new PVector (dx,dy);  
       rayon = 20;  
      }  
    void rebondir() {  
    if (position.x > width|| position.x < 0)
    {
      deplacement.x=deplacement.x*-1;  
    }  
           if (position.y >height||position.y<0)
  {  
     deplacement.y= deplacement.y* -1;  
    }  
      }  
  void bouger() {  
    position.x += deplacement.x;  
    position.y += deplacement.y;  
     }  
     void collision(Balle j) {  
    float distance =position.dist(j.position); 
   if(distance<40)
{
  fill(255,0,255);
}
else
{
  fill(0,255,255);
   }
  ellipse(position.x,position.y,40,40);
    }
 }

Hors ligne

 

#2 2013-10-21 10:04:07 Re : collisions balle.

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

Re: collisions balle.



Bonjour,

Cela n'a pas de rapport. Tu allais trop vite en besogne, puisque tu regardais les collisions et voulait afficher le résultat. Donc tu détectais une collision avec une boule, mais comme le pas d'après dans ta boucle :

for (int j = i + 1 ; j < nb; j++) {    
      balle[i].collision(balle[j]);   
       }

La distance d'une autre boule était supérieure à celle d'une collision donc la couleur d'affichage redevenait cyan.
Je te propose la solution suivante :

int nb=10;    
Balle[]balle=new Balle[nb];    
void setup() {    
  size(800, 700);    
  for (int i=0;i<nb;i++) {    
    balle[i]=new Balle(random(width), random(height), -1, 1);
  }
}    
void draw() {    
  background(255);    
  for (int i=0;i<nb;i++) {    
    balle[i].rebondir();    
    balle[i].bouger();
  }    
  for (int i=0;i<nb;i++) {    
    for (int j = i + 1 ; j < nb; j++) {    
      balle[i].collision(balle[j]);
    }
  }
  for (int i=0;i<nb;i++) {    
    balle[i].afficher();
  }
}    

class Balle {    
  PVector position;    
  PVector deplacement;  
  int rayon;   
  boolean bing; 

  Balle(float px, float py, float dx, float dy) {    
    position = new PVector(px, py);    
    deplacement=new PVector (dx, dy);    
    rayon = 20;
  }    

  void rebondir() {   
    bing = false; 
    if (position.x > width|| position.x < 0)  
    {  
      deplacement.x=deplacement.x*-1;
    }    
    if (position.y >height||position.y<0)  
    {    
      deplacement.y= deplacement.y* -1;
    }
  }    

  void bouger() {   
    position.add(deplacement);
  }    

  void collision(Balle j) {    
    float distance = position.dist(j.position);   
    if (distance<40) {
      bing = true;
      j.bing = true;
    }
  }

  void afficher() {
    if (bing) {
      fill(255, 0, 255);
    } 
    else {
      fill(0, 255, 255);
    }
    ellipse(position.x, position.y, 40, 40);
  }
}

Dernière modification par Mushussu (2013-10-21 10:04:47)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024