Maison >développement back-end >Tutoriel Python >Pourquoi ma détection de collision Pygame renvoie-t-elle toujours vrai et pourquoi la position de mon rectangle d'image est-elle incorrectement définie sur (0, 0) ?

Pourquoi ma détection de collision Pygame renvoie-t-elle toujours vrai et pourquoi la position de mon rectangle d'image est-elle incorrectement définie sur (0, 0) ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 12:57:11682parcourir

Why Does My Pygame Collision Detection Always Return True, and Why Is My Image Rectangle Position Incorrectly Set to (0, 0)?

Pourquoi le test de collision renvoie toujours « Vrai » et la position du rectangle de l'image est toujours fausse (0, 0)

Problème du test de collision

Raison :

Le test de collision repose sur l'attribut rect du Sprite des objets pour déterminer s'ils se croisent. Cependant, la méthode get_rect() dans votre code ne définit pas correctement la position du rectangle aux coordonnées prévues.

Solution :

Lors de l'utilisation de get_rect() , vous pouvez spécifier la position avec des arguments de mots-clés ou l'attribuer à l'attribut virtuel supérieur gauche du rectangle. Utilisez ce code corrigé :

self.rect = self.image.get_rect(topleft=(self.x, self.y))

Position du rectangle incorrecte

Raison :

Vous avez ajouté des attributs x et y inutiles aux sprites au lieu de vous fier sur la position du rectangle. Par conséquent, la position du rectangle est toujours définie sur (0, 0) car les objets Surface n'ont pas de position par défaut.

Solution :

Supprimer les attributs x et y et utilisez l'attribut rect pour définir la position des objets Sprite. Voici le code corrigé :

class Ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("ball.png")
        self.rect = self.image.get_rect(topleft=(280, 475))
        self.col = False

Code simplifié à l'aide de Sprite Group

Vous pouvez simplifier davantage votre code en utilisant un pygame.sprite.Group pour gérer les objets Sprite. Cela gérera automatiquement le dessin et la mise à jour.

obstacle = Obstacle()
ball = Ball()

# Create a sprite group and add the sprites to it.
all_sprites = pygame.sprite.Group([obstacle, ball])

while not crashed:
    # [... event handling and game logic]

    gameDisplay.fill((255, 255, 255))

    # Draw all sprites using the group's draw method.
    all_sprites.draw(gameDisplay)

    # [... other game loop tasks]

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