Maison >développement back-end >Tutoriel Python >Pourquoi ma balle de pong glisse-t-elle le long de la raquette au lieu de rebondir ?
La balle refuse de rebondir sur la pagaie dans le jeu de pong
Dans certains cas, les joueurs peuvent rencontrer une anomalie dans leur jeu de pong : la balle inexplicablement glisse le long de la pagaie au lieu de rebondir dessus. Ce comportement aberrant provient d'un défaut subtil dans le mécanisme de détection de collision.
Défauts de détection de collision
Lorsque la balle entre en collision avec le rectangle de la pagaie, sa direction est modifiée. Cependant, il arrive parfois que la collision ne se produise pas sur l'avant de la pagaie mais sur sa partie supérieure ou inférieure. Alors que la collision est détectée et que la trajectoire de la balle est inversée de manière appropriée, la balle a déjà pénétré profondément dans la raquette.
Dans l'image suivante, la balle ne peut pas sortir de la zone de collision. En conséquence, une deuxième collision est détectée, inversant une fois de plus la direction de la balle. Ce schéma se répète jusqu'à ce que la balle finisse par « tomber » du bord inférieur de la raquette.
Résoudre le problème
Pour remédier à ce problème, plusieurs solutions existent. Une approche consiste à ajuster la direction de la balle. Au lieu de simplement l'inverser, nous pouvons définir la direction vers la gauche (ou la droite) en cas de collision avec la pagaie gauche (ou droite), respectivement :
if ball.colliderect(paddleLeft): move_x = abs(move_x) if ball.colliderect(paddleRight): move_x = -abs(move_x)
Alternativement, nous pouvons ajuster la position de la balle avec précision . Lors d'une collision avec la pagaie gauche (ou droite), on s'assure que le bord gauche (ou droit) de la balle est situé à droite (ou à gauche) de la limite de pagaie correspondante :
if ball.colliderect(paddleLeft): move_x *= -1 ball.left = paddleLeft.right if ball.colliderect(paddleRight): move_x *= -1 ball.right = paddleRight.left
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!