Maison >développement back-end >Tutoriel Python >Comment résoudre la pénétration d'une balle dans le mur supérieur dans le scénario de rebond de balle PyGame ?
Implémentation de la balle qui rebondit sur les murs à l'aide de PyGame
Comprendre le problème
Créer un jeu où une balle rebondit sur les murs dans PyGame implique de détecter les collisions entre la balle et les limites de l'environnement de jeu. Bien que le code Python fourni ait l'intention d'implémenter ce comportement, il rencontre un problème où la balle pénètre dans le mur supérieur au lieu de rebondir dessus.
Solution
Pour résoudre ce problème problème, nous pouvons utiliser une approche différente :
Mise en œuvre
<code class="python">import pygame # Initialize PyGame pygame.init() # Set screen dimensions screenWidth = 1200 screenHeight = 700 # Create the game window window = pygame.display.set_mode((screenWidth, screenHeight)) pygame.display.set_caption('Atari Breakout') # Define the ball's initial position and radius box = Circle(600, 300, 10) # Define the boundary bounds bounds = pygame.Rect(450, 200, 300, 200) # Main game loop run = True clock = pygame.time.Clock() while run: # Set the frame rate clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False # Check for key presses (spacebar to start the ball's movement) keys = pygame.key.get_pressed() if keys[pygame.K_SPACE]: start = True # Move the ball and adjust its velocity when it hits the boundaries 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 # Render the game window 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() # Quit PyGame pygame.quit()</code>
Dans ce code, le mouvement de la balle continue indéfiniment dans la boucle du jeu. Lorsqu’il rencontre les limites, sa vitesse est modifiée, le faisant rebondir sur les murs. L'objet pygame.Rect garantit que la balle reste dans la zone désignée.
Classe Vector2
Bien que la classe vector2 ne soit pas nécessaire pour cette implémentation, elle fournit diverses opérations pour les vecteurs 2D. Pour plus d'informations sur la classe vector2, reportez-vous à la documentation PyGame.
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!