Bouncing Ball in PyGame Without Vector2 Class
In this scenario, you're encountering an issue making a ball bounce off walls in PyGame's script, particularly when colliding with the top wall. Despite your research, you're still experiencing challenges.
Nested Loops and Alternative Approach:
The main issue is multiple nested loops. Instead, continuously move the ball within the application loop.
<code class="python">box.y -= box.vel_y box.x += box.vel_x</code>
Defining a Rectangular Region:
Create a rectangular region, or bounds, for the ball using a PyGame Rect object. This will define the area within which the ball can move.
<code class="python">bounds = window.get_rect() # full screen</code>
Or, you can specify a specific rectangular region:
<code class="python">bounds = pygame.Rect(450, 200, 300, 200) </code>
Changing Direction of Movement:
When the ball hits the bounds, change its direction of movement using the following code:
<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>
Example:
Here's an example that demonstrates this approach:
<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>
This example includes a red rectangle representing the bounds within which the ball moves and bounces off the walls.
The above is the detailed content of How to Make a Bouncing Ball in PyGame without Relying on Vector2 Class?. For more information, please follow other related articles on the PHP Chinese website!