[Java] rebond d'une balle sur une paroi

Résolu
Blashyrk Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
Blashyrk Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
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

Siluni
 
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   Statut Membre Dernière intervention   5
 
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
Siluni
 
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   Statut Membre Dernière intervention   5
 
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   Statut Membre Dernière intervention   5
 
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