Voilà un exemple de collision que tu pourras facilement implémenter dans ton code :
ArrayList<Balle> balles; void setup() { size (600, 600); balles = new ArrayList<Balle>(); for (int i = 0; i < 10; i++) { balles.add(new Balle(i)); } noStroke(); } void draw() { background(255); for (Balle b : balles) { b.mettreAJour(); b.collision(balles); b.afficher(); } } class Balle { PVector position, vitesse; int id, vitesseMax, rayon; color couleur; float masse; Balle(int _id) { vitesseMax = 5; rayon = 20; position = new PVector(random(rayon, width - rayon), random(rayon, height - rayon)); vitesse = PVector.random2D(); vitesse.mult(random(vitesseMax / 3, vitesseMax)); couleur = color(255, 0, 0); masse = random(2, 10); id = _id; } void mettreAJour() { vitesse.limit(vitesseMax); position.add(vitesse); } void collision(ArrayList<Balle> autres) { // Balles for (int i = id + 1; i < autres.size(); i++) { Balle b = autres.get(i); if (position.dist(b.position) <= (b.rayon + rayon)) { PVector d = PVector.sub(b.position, position); d.setMag(rayon + b.rayon); d.add(position); d.sub(b.position); vitesse.sub(d); b.vitesse.add(d); } } // Murs if ((position.x < rayon) || (position.x > (width - rayon))) { vitesse.x *= - 1; } if ((position.y < rayon) || (position.y > (height - rayon))) { vitesse.y *= -1; } } void afficher() { fill(couleur); ellipse(position.x, position.y, 2 * rayon, 2 * rayon); } }
Hors ligne
d’après ce que j'avais compris, je croyais que c'est toi tu voulais modifier les angles;mais pour en revenir à tes problèmes de rebonds ,je t'ais envoyé un petit programme de balles qui rebondissent les unes sur les autres ,tu t'es aperçus que les rebonds se fonds très biens ,par contre dans ton programme il y à les balles qui se croisent et qui tremblent ;j'ai eus le même problème sur un autre programme;le default venait de la gestion de la collision essaye de regarder comment est conçu le système de collision du petit programme et adapte le au tien;c'est mushussu qui m'a montré ce système avec un boolean bing=true
nous on fait :ex
distance=v1.dist(v2)
if distanse<20
inverser: deplacement*=-1:après peut importe ce que tu met à la place du -1.
cela parait normal mais ça ne fonctionne pas bien;mushussu pourrait t'expliquer pourquoi ;mais moi je ne sais pas;je pense que c'est la position dans le programme de la fonction d'inversion qui fait la différence.Mais la je viens de voir que mushussu t'a envoyé un programme de collision il fonctionne très bien.
Bon courage .
Hors ligne
Pages: 1 2