Maison  >  Article  >  développement back-end  >  Comment créer une balle rebondissante dans PyGame sans compter sur la classe Vector2 ?

Comment créer une balle rebondissante dans PyGame sans compter sur la classe Vector2 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-18 20:57:02625parcourir

How to Make a Bouncing Ball in PyGame without Relying on Vector2 Class?

Balle rebondissante dans PyGame sans classe Vector2

Dans ce scénario, vous rencontrez un problème pour faire rebondir une balle sur les murs dans le script de PyGame , en particulier lors d'une collision avec le mur supérieur. Malgré vos recherches, vous rencontrez toujours des défis.

Boucles imbriquées et approche alternative :

Le principal problème réside dans les boucles imbriquées multiples. Au lieu de cela, déplacez continuellement la balle dans la boucle d'application.

<code class="python">box.y -= box.vel_y        
box.x += box.vel_x</code>

Définition d'une région rectangulaire :

Créez une région rectangulaire, ou des limites, pour la balle à l'aide d'un Objet PyGame Rect. Cela définira la zone dans laquelle la balle peut se déplacer.

<code class="python">bounds = window.get_rect() # full screen</code>

Ou, vous pouvez spécifier une région rectangulaire spécifique :

<code class="python">bounds = pygame.Rect(450, 200, 300, 200) </code>

Changer la direction du mouvement :

Lorsque la balle atteint les limites, changez sa direction de mouvement en utilisant le code suivant :

<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 :

Voici un exemple qui démontre cette approche :

<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>

Cet exemple comprend un rectangle rouge représentant les limites dans lesquelles la balle se déplace et rebondit sur les murs.

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