Dans un jeu de pong typique, la balle doit rebondir correctement sur les raquettes. Cependant, dans certaines circonstances, les joueurs peuvent rencontrer un comportement étrange où la balle vacille le long du bord de la raquette, ne parvenant pas à rebondir correctement.
Lorsque la balle entre en collision avec la raquette de manière traditionnelle, sa direction est inversée comme suit :
if ball.colliderect(paddleLeft): move_x *=-1 if ball.colliderect(paddleRight): move_x *=-1
Cependant, si la balle entre en collision avec le haut ou le bas de la raquette, la balle peut pénétrer légèrement dans la raquette. Dans l'image suivante, la collision est toujours détectée, provoquant un autre changement de direction. Cela se traduit par un mouvement en zigzag le long du bord de la pagaie.
Pour résoudre ce problème, il existe deux approches viables :
1. Définir la direction en fonction du côté de la pagaie
Au lieu d'inverser la direction à chaque collision, ajustez la direction en fonction du côté de la pagaie que la balle frappe :
if ball.colliderect(paddleLeft): move_x = abs(move_x) if ball.colliderect(paddleRight): move_x = -abs(move_x)
Cette approche garantit la balle rebondit sur l'avant de la pagaie comme prévu.
2. Ajuster la position de la balle après la collision
Vous pouvez également modifier la position de la balle pour la placer correctement après une collision :
if ball.colliderect(paddleLeft): move_x *= -1 ball.left = paddleLeft.right if ball.colliderect(paddleRight): move_x *= -1 ball.right = paddleRight.left
Avec cette méthode, la balle est automatiquement placée juste à l'extérieur de la raquette. bord, empêchant le comportement en zigzag.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!