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);
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
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