[Java] rebond d'une balle sur une paroi

Résolu/Fermé
Blashyrk Messages postés 19 Date d'inscription lundi 4 octobre 2010 Statut Membre Dernière intervention 26 octobre 2011 - 31 oct. 2010 à 17:36
Blashyrk Messages postés 19 Date d'inscription lundi 4 octobre 2010 Statut Membre Dernière intervention 26 octobre 2011 - 6 nov. 2010 à 01:02
Bonjour,

J'ai un exercice à réaliser en Java et je bloque à une étape du début : faire rebondir la boule sur les parois du billard.

Quand ma boule arrive sur une paroi, elle est comme absorbée, déviée vers l'extérieur de la paroi. Par contre quand elle arrive dans un coin, elle rebondit bien.

les parois sont regroupées dans 2 vecteurs (parVert et parHor), la boule est dessinée dans un rectangle au moyen de fillOval et les parois sont des rectangles dessinés au moyen de fillRectangle.

Le code de la méthode bouge de la classe Balle:

public void bouge()
{
	for(Paroi vectVert : billard.getParVert()) //on boucle sur les parois verticales
	{
		if(vectVert.collision(this))
			deltaX*=-1;
	}
		
	for(Paroi vectHor : billard.getParHor()) //on boucle sur les parois horizontales
	{
		if(vectHor.collision(this))
			deltaY*=-1;
	}
		
	rect.x+=deltaX;
	rect.y+=deltaY;
}


Et le code de la méthode collision de la classe Paroi:

public boolean collision(Balle b)
{
	return rect.intersects(b.getRect());
}


Pour que la boule se déplace à l'écran, j'utilise un thread de la classe ThreadMouvement:
public void run()
{
	while(true)
	{
		try
		{
			Thread.sleep(3);
			billard.getBalle().bouge();
			billard.repaint();
		}
		catch (Exception e)
		{}
	}
}



A voir également:

5 réponses

Ajoute a ta methode Coliision un
System.out.println('Je touche');

Et vérifie avec le console que ton event est bien appeler au bon momment :)
0
Blashyrk Messages postés 19 Date d'inscription lundi 4 octobre 2010 Statut Membre Dernière intervention 26 octobre 2011 5
1 nov. 2010 à 20:17
Pas bête du tout ça :) .

Alors, quand la balle entre dans le coin supérieur gauche, c'est parfait. Autre part, ça foire complètement : sur les parois horizontales, le message "Je touche" apparait une multitude de fois.
J'ai rajouté un message à afficher quand le programme entre dans les if des for (hum) de la méthode bouge.
Quand une paroi horizontale est touchée, le message du if sur les parois verticales s'affiche !

Et je vois toujours pas pourquoi ça plante :P
0
Je viens de voir un truc
Dans ta methode bouge(), tu initialise pas deltaX et deltaY ?
0
Blashyrk Messages postés 19 Date d'inscription lundi 4 octobre 2010 Statut Membre Dernière intervention 26 octobre 2011 5
1 nov. 2010 à 21:11
Si si, quand je les déclare dans ma classe Balle, je les initialise à 1 (sinon il n'y aurait pas de mouvement du tout).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Blashyrk Messages postés 19 Date d'inscription lundi 4 octobre 2010 Statut Membre Dernière intervention 26 octobre 2011 5
6 nov. 2010 à 01:02
Finalement, au bout de plusieurs jours de recherche, j'ai trouvé la faille :
c'était dans la méthode fillRect(), j'ai inversé les 2 derniers paramètres (width et height).
0