Maison >développement back-end >Tutoriel Python >Pourquoi ma balle de pong glisse-t-elle le long de la raquette au lieu de rebondir ?

Pourquoi ma balle de pong glisse-t-elle le long de la raquette au lieu de rebondir ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-14 15:17:02221parcourir

Why Does My Pong Ball Slide Along the Paddle Instead of Bouncing?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn