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
Libérer: 2024-10-18 21:00:30
original
416 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal