Heim >Backend-Entwicklung >Python-Tutorial >Warum gibt meine Pygame-Kollisionserkennung immer „True' zurück und warum ist die Position meines Bildrechtecks ​​fälschlicherweise auf (0, 0) eingestellt?

Warum gibt meine Pygame-Kollisionserkennung immer „True' zurück und warum ist die Position meines Bildrechtecks ​​fälschlicherweise auf (0, 0) eingestellt?

Linda Hamilton
Linda HamiltonOriginal
2024-12-18 12:57:11683Durchsuche

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

Warum der Kollisionstest immer „True“ zurückgibt und die Position des Bildrechtecks ​​immer falsch ist (0, 0)

Problem mit dem Kollisionstest

Grund:

Der Kollisionstest basiert auf dem Rect-Attribut des Sprite-Objekte, um festzustellen, ob sie sich überschneiden. Allerdings stellt die get_rect()-Methode in Ihrem Code die Position des Rechtecks ​​nicht richtig auf die beabsichtigten Koordinaten ein.

Lösung:

Bei Verwendung von get_rect() können Sie die Position mit Schlüsselwortargumenten angeben oder sie dem virtuellen Attribut oben links des Rechtecks ​​zuweisen. Verwenden Sie diesen korrigierten Code:

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

Falsche Rechteckposition

Grund:

Sie haben den Sprites unnötige x- und y-Attribute hinzugefügt, anstatt sich darauf zu verlassen von der Position des Rechtecks. Daher wird die Position des Rechtecks ​​immer auf (0, 0) gesetzt, da Oberflächenobjekte keine Standardposition haben.

Lösung:

Entfernen Sie die x- und y-Attribute und verwenden Sie das rect-Attribut, um die Position der Sprite-Objekte festzulegen. Hier ist der korrigierte Code:

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

Vereinfachter Code mithilfe der Sprite-Gruppe

Sie können Ihren Code weiter vereinfachen, indem Sie eine pygame.sprite.Group zum Verwalten der Sprite-Objekte verwenden. Dadurch wird das Zeichnen und Aktualisieren automatisch durchgeführt.

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]

Das obige ist der detaillierte Inhalt vonWarum gibt meine Pygame-Kollisionserkennung immer „True' zurück und warum ist die Position meines Bildrechtecks ​​fälschlicherweise auf (0, 0) eingestellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn