Tout d'abord j'aimerais vous féliciter pour ce forum que j'observe depuis un moment
Je suis entrain de faire un simple pong, avec les calcule de rebondissement un peu comme dans brickbreaker.
Cela veut dire : Plus la balle tape près du bord de la barre, plus elle va partir dans cette direction.
Le problème c'est qu'elle rebondie comme elle veut, parfois juste, parfois l'inverse, parfois il stabilise la balle...
J'ai décidé que si la balle tape le dernier pixel du bord, l'angle sera 50% plus vertical.
Voici des graphique de comment j'ai pensé les calcules :
Quand il y a collision avec la bar du joueur :

Les calculs pour renvoyé la balle comme il faut :

Et ici le code java des calcules. Le problème ne peut venir que de ce code car les variable d'angle et de vitesse sont parfois aléatoire, et je ne comprend vraiment pas pourquoi. Mais les méthodes utilisées la dedans comme getBallOnPlancheYPourcent sont correctes !
- Code: Tout sélectionner
public void bounceBallIntoPlanche(Sprite s1){
//calcule vitesse pixel/sec
double v = Math.sqrt(Math.pow(ballSpeedX, 2)+Math.pow(ballSpeedY, 2));
//calcule de l'angle de début
double cosA = ballSpeedX / v;
double A = Math.toDegrees(Math.acos(cosA));
if(A == 180 || A == 0){
A = 1;
}
//calcule de l'angle de destination
double angleFinal = A + A*(getBallOnPlancheYPourcent(s1)/100);
// augmentation de la vitesse de la balle
v = v++;
//recalcule des vitesse X et Y de la balle
double newBallSpeedX = Math.cos(angleFinal) * v;
double newBallSpeedY = Math.sin(angleFinal) * v;
//verification si le X ou le Y doit êter positif ou négatif
if(ballSpeedX 0){
ballSpeedX = newBallSpeedX * -1;
}else{
}
if(ballSpeedY 0 || ballSpeedY == 0){
ballSpeedY = newBallSpeedY;
}else{
}
System.out.println(ballSpeedY+":"+ballSpeedX+":"+angleFinal);
}
Merci de m'aider,
Cordialement,
rXp>!<
