Comment résoudre la pénétration d'une balle dans le mur supérieur dans le scénario de rebond de balle PyGame ?

DDD
Libérer: 2024-10-18 21:02:03
original
556 Les gens l'ont consulté

How to Resolve Ball Penetrating Top Wall in PyGame Ball Bounce Scenario?

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 :

  1. Mouvement continu de la balle : Déplacez continuellement la balle dans la boucle principale de l'application.
  2. Définir les limites des limites  : Définissez une région rectangulaire à l'aide d'un objet pygame.Rect pour indiquer les limites dans lesquelles la balle peut se déplacer.
  3. Détection de collision et changement de direction : Lorsque la balle atteint les limites, changer sa direction de mouvement en conséquence. Par exemple, si la balle touche le mur supérieur, sa vitesse verticale doit être inversée.

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!