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
Libérer: 2024-12-18 12:57:11
original
680 Les gens l'ont consulté

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

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

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]
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.cn
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