Maison >développement back-end >Tutoriel Python >Comment empêcher la balle de franchir les limites dans PyGame ?

Comment empêcher la balle de franchir les limites dans PyGame ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-18 21:00:30390parcourir

How to Prevent Ball from Crossing Boundaries in PyGame?

Comment faire rebondir une balle sur les murs avec PyGame

Problème

Dans PyGame, comment empêcher une balle d'entrer dans un mur quand il en frappe un ?

Solution

Boucles imbriquées :

Le problème provient de l'utilisation de plusieurs boucles imbriquées. Il est plus efficace de gérer le mouvement dans la boucle d'application.

<code class="python">while run:                     
    # Handle movement continuously
    box.y -= box.vel_y        
    box.x += box.vel_x</code>

Définition des limites :

Définissez une région rectangulaire pour le mouvement de la balle à l'aide d'un objet pygame.Rect :

<code class="python">bounds = window.get_rect() # full screen
bounds = pygame.Rect(450, 200, 300, 200)  # rectangular region</code>

Gestion des collisions aux limites :

Mettre à jour la direction de la balle lorsqu'elle croise les limites :

<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

<code class="python">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>

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