Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-10-18 20:57:02
original
738 Les gens l'ont consulté

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

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

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

<code class="python">bounds = pygame.Rect(450, 200, 300, 200) </code>
Copier après la connexion

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

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

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!

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