Annonce

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


#1 2015-10-21 17:31:03 Détection de collision

moduloo
membre
Date d'inscription: 2015-10-15
Messages: 13

Détection de collision



En reprenant l'exercice de base des boules mobiles, je cherche à gérer les chocs entre les boules. Voici le code de la méthode deplace() de la classe maboule, où maboule[i] est le tableau d'instance des boules. Si cela marche pas trop mal, deux problèmes :
- si une boule arrive par la droite d'une boule statique, elles se collent entre elles et ne bougent plus. (alors qu'un choc par la gauche marche bien !)
- les vitesses après choc ne sont pas vraiment les bonnes (addition non vectorielle)

Auriez-vous un algo qui prenne en charge cette gestion de choc ??

Merci de votre aide.

int deplace(){
   float d;
   
   // update la position
   positionx +=vitessex;
   positiony +=vitessey;

  // verifier si on n'est pas proche d'une des autres boules
  int i=0, fin=0;
  while((i<nb_cercles)&&(fin==0)){
      d=sqrt(sq(maboule[i].positionx-positionx)+sq(maboule[i].positiony-positiony));
     
      if ( (d>3)&&(d<=2*rayon) )
        {           
          vitessey = -(2*vitessey+maboule[i].vitessey)/3;
          vitessex = -(2*vitessex+maboule[i].vitessex)/3;
          maboule[i].vitessex =  -vitessex ;
          maboule[i].vitessey = -vitessey ;
          positionx = maboule[i].positionx - cos(atan((maboule[i].positiony-positiony)/(maboule[i].positionx-positionx))) * 2.1 * rayon;
          positiony = maboule[i].positiony - sin(atan((maboule[i].positiony-positiony)/(maboule[i].positionx-positionx))) * 2.1 * rayon;
          fin=1;
        }
        i++;
   } 

   // decelere;
   vitessex *= 0.99;
   vitessey *= 0.99;
   
   return fin;
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024