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?
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
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
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