Heim > Backend-Entwicklung > Python-Tutorial > Warum ist meine Pygame-Kollisionserkennung immer wahr und warum sind meine Sprites bei (0, 0) positioniert?

Warum ist meine Pygame-Kollisionserkennung immer wahr und warum sind meine Sprites bei (0, 0) positioniert?

Mary-Kate Olsen
Freigeben: 2024-12-16 19:52:28
Original
288 Leute haben es durchsucht

Why is my Pygame collision detection always True, and why are my sprites positioned at (0, 0)?

Fehlerbehebung bei der Kollisionserkennung und Sprite-Positionierung

In Ihrem Code treten zwei Probleme auf: Die Funktion collide_rect gibt durchweg sogar „True“ zurück wenn dies nicht der Fall sein sollte und die Position des Rechtecks, das die Sprites darstellt, scheinbar (0, 0).

Befassen wir uns zunächst mit der Kollisionserkennung. Der Grund, warum collide_rect immer „True“ zurückgibt, liegt darin, dass Sie die Position der Rechtecke nicht richtig festlegen. pygame.Surface.get_rect() gibt ein Rechteckobjekt mit den Abmessungen der Oberfläche zurück, beginnt jedoch immer bei (0, 0). Um das Rechteck an der Position des Sprites zu platzieren, müssen Sie eine dieser Methoden verwenden:

self.rect = self.image.get_rect(topleft=(self.x, self.y))
Nach dem Login kopieren

oder

self.rect = self.image.get_rect()
self.rect.topleft = (self.x, self.y)
Nach dem Login kopieren

Indem Sie das Attribut „oben links“ des Rechtecks ​​festlegen, sind Sie explizit dabei Richten Sie es an der Position des Sprites aus.

Was die falsche Sprite-Position betrifft, haben Sie unnötige self.x- und self.y-Attribute eingeführt. Es ist besser, sich direkt auf die Position des Rechtecks ​​zu verlassen. Dies ist ein Beispiel, bei dem die Attribute entfernt und die Position oben links im get_rect()-Aufruf festgelegt wurde:

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

class Obstacle(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("obstacle.png")
        self.rect = self.image.get_rect(topleft=(1000, 483))
Nach dem Login kopieren

Zusätzlich können Sie sich dafür entscheiden, eine pygame.sprite.Group zu verwenden, um das Sprite-Rendering zu verarbeiten und Aktualisierung. Dies vereinfacht den Zeichenvorgang, da alle Sprites in der Gruppe gezeichnet werden:

all_sprites = pygame.sprite.Group([obstacle, ball])

while not crashed:
    # [...]

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

    all_sprites.draw(gameDisplay)

    pygame.display.flip()
    clock.tick(1000)
Nach dem Login kopieren

Bitte beachten Sie, dass die Methoden Ball.update() und Obstacle.update() entfernt werden können, wenn Sie eine Gruppe als solche verwenden kümmert sich um die Aktualisierung der Sprite-Position und das Zeichnen des Bildes auf dem Display.

Das obige ist der detaillierte Inhalt vonWarum ist meine Pygame-Kollisionserkennung immer wahr und warum sind meine Sprites bei (0, 0) positioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage