Balle rebondissante dans PyGame sans classe Vector2
Dans ce scénario, vous rencontrez un problème pour faire rebondir une balle sur les murs dans le script de PyGame , en particulier lors d'une collision avec le mur supérieur. Malgré vos recherches, vous rencontrez toujours des défis.
Boucles imbriquées et approche alternative :
Le principal problème réside dans les boucles imbriquées multiples. Au lieu de cela, déplacez continuellement la balle dans la boucle d'application.
<code class="python">box.y -= box.vel_y box.x += box.vel_x</code>
Définition d'une région rectangulaire :
Créez une région rectangulaire, ou des limites, pour la balle à l'aide d'un Objet PyGame Rect. Cela définira la zone dans laquelle la balle peut se déplacer.
<code class="python">bounds = window.get_rect() # full screen</code>
Ou, vous pouvez spécifier une région rectangulaire spécifique :
<code class="python">bounds = pygame.Rect(450, 200, 300, 200) </code>
Changer la direction du mouvement :
Lorsque la balle atteint les limites, changez sa direction de mouvement en utilisant le code suivant :
<code class="python">if box.x - box.radius < bounds.left or box.x + box.radius > bounds.right: box.vel_x *= -1 if box.y - box.radius < bounds.top or box.y + box.radius > bounds.bottom: box.vel_y *= -1 </code>
Exemple :
Voici un exemple qui démontre cette approche :
<code class="python">import pygame box = Circle(600,300,10) run = True start = False clock = pygame.time.Clock() while run: clock.tick(120) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys = pygame.key.get_pressed() if keys[pygame.K_SPACE]: start = True bounds = pygame.Rect(450, 200, 300, 200) if start: box.y -= box.vel_y box.x += box.vel_x if box.x - box.radius < bounds.left or box.x + box.radius > bounds.right: box.vel_x *= -1 if box.y - box.radius < bounds.top or box.y + box.radius > bounds.bottom: box.vel_y *= -1 window.fill((0,0,0)) pygame.draw.rect(window, (255, 0, 0), bounds, 1) pygame.draw.circle(window, (44,176,55), (box.x, box.y), box.radius) pygame.display.update()</code>
Cet exemple comprend un rectangle rouge représentant les limites dans lesquelles la balle se déplace et rebondit sur les murs.
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!