Rebond casse brique java

Fermé
rr - 20 avril 2008 à 19:18
 linus - 23 févr. 2012 à 16:17
Bonjour, je réalise un projet en java sous eclipse du jeu du casse brique.
Je n'arrive pas à gérer les rebonds entre la balle et la raquette de jeu.
Pour l'instant , si la balle entre en contact avec la raquette,celle ci prend un angle droit.
Le jeu est donc répétitif(cela provoque toujours la meme partie!).
J'ai pensé à gérer la raquette en trois parties(gauche milieu et droite) afin de donner un certain angle
à la balle en fonction de la zone touchée. Seulement je ne vois pas du tout comment faire
Pouvez-vous m'aider?Ya-t-il une meilleure solution?
Voici le code de ma classe balle de la méthode move() appelé dans le thread de ma balle :

public void move() {
x += dx;
y += dy;

//contact avec un mur
if (x < 0) {
x = 0;
dx = -dx;
}
if (x + XSIZE >= canvas.getWidth()) {
x = canvas.getWidth() - XSIZE;
dx = -dx;
}
if (y < 0) {
y = 0;
dy = -dy;
}
if (y + YSIZE >= canvas.getHeight()) {
y = canvas.getHeight() - YSIZE;
dy = -dy;
}



Raquette r = ((BalleCanevas)canvas).getRaquette();
if (r.contact(x, y)==1){
//contact entre la balle et la raquette
y=r.getY()-YSIZE;
dy =-dy; // pour l'instant je donne un angle droit

}

Classe raquette méthode contact :

public int contact(int x2, int y2) {

int cas =0;

if ( x2>this.getX() && x2<(this.getX() + Raquette.XSIZE)
&& (y2 + Balle.getYSIZE())>this.getY() && (y2 - Balle.getXSIZE())<(this.getY() + Raquette.YSIZE))
{

//si la balle entre en contact avec la partie
//gauche de la raquette
if(x2<this.getX()+5)
cas=1;
// si la balle entre en contact avec le milieu
//de la raquette
else if(x2<this.getX()+10)
cas=2;
// si la balle entre en contact avec la partie
//droite de la raquette
else cas=3;


}
return cas;
}
A voir également:

2 réponses

vignemail1 Messages postés 1246 Date d'inscription vendredi 8 octobre 2004 Statut Contributeur Dernière intervention 13 septembre 2019 259
21 avril 2008 à 07:05
Il faut plutôt calculer l'angle de réflexion si tu ne veux pas es angles droits à chaque rebond. L'angle d'arrivé sur la surface = l'angle de rebond. i=r en optique. Il faut donc savoir l'angle de la surface, l'angle d'arrivée afin de calculer l'angle de rebond.
1
jette un oeil à ce code source tu y trouvera ce que tu cherches , perso ça m'a bien dépanné : http://sourceforge.net/projects/javabreakgame/
1