Wie benutzt man Sprite Collide in Pygame

Ich mache ein sehr einfaches Spiel, wo der Vogel (Spieler) dem Rock ausweichen muss und wenn er von dem Rock, den du verlierst, getroffen wird. Ich versuche, pygame.sprite.collide_rect () zu benutzen, um zu sagen, ob sie berührt haben, aber ich kann nicht scheinen, um zu zeigen, wie man es richtig benutzt.

Hier ist mein Code:

import pygame import os, sys import random import time img_path = os.path.join('C:\Python27', 'player.png') img_path2 = os.path.join('C:\Python27', 'rock.png') class Bird(object): def __init__(self): self.image_s = pygame.image.load(img_path) self.image_b = self.image_s.get_rect() self.x = 0 self.y = 0 def handle_keys(self): key = pygame.key.get_pressed() dist = 2 if key[pygame.K_DOWN]: self.y += dist elif key[pygame.K_UP]: self.y -= dist if key[pygame.K_RIGHT]: self.x += dist elif key[pygame.K_LEFT]: self.x -= dist def draw(self, surface): surface.blit(self.image, (self.x, self.y)) def background(self, surface): bg = os.path.join('C:\Python27', 'bg.png') self.image2 = pygame.image.load(bg) surface.blit(self.image2, (0,0)) class Rock(object): def __init__(self, x=640, y=0,): self.image_s = pygame.image.load(img_path2) self.image_b = self.image_s.get_rect() self.x = x self.y = y dist = 10 self.dist = dist def rock(self): dist = 10 self.x -=dist def rock_draw(self, surface): surface.blit(self.image, (self.x, self.y)) def checkCollision(sprite1, sprite2): col = pygame.sprite.collide_rect(sprite1, sprite2) if col == True: sys.exit() pygame.init() screen = pygame.display.set_mode((640, 200)) bird = Bird() rock = Rock() clock = pygame.time.Clock() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() running = False if rock.x < 0: y = random.randint(10, 190) rock = Rock(640, y) rock.checkCollision(bird.image_b, rock.image_b) bird.handle_keys() rock.rock() screen.fill((255,255,255)) bird.background(screen) bird.draw(screen) rock.rock_draw(screen) pygame.display.update() clock.tick(40) 

Wenn ich versuche es zu laufen, sagt es mir, dass es nur 2 Argumente und ich gab drei, wenn ich versuche zu beheben, dass ich alle Arten von verschiedenen Fehlermeldungen bekommen.

  • Pyglet: Sprite.draw () und Batch.draw () funktionieren nicht, aber Image.blit tut
  • Animiertes Sprite aus wenigen Bildern
  • Außerhalb des Gedächtnisses bei der Verwendung von pygame.transform.rotate
  • Pygame - Sprite Bewegung verursacht Schichten
  • Verschieben Sie ein Objekt alle paar Sekunden in Pygame
  • Kann konstante Tasteneingabe ein Sprite ständig bewegen?
  • Pygame: Kollision von Seiten von Sprite
  • Pyglet: Ändern des Bildes einer Sprite-Instanz beim Drücken einer Taste
  • 3 Solutions collect form web for “Wie benutzt man Sprite Collide in Pygame”

     def checkCollision(sprite1, sprite2): col = pygame.sprite.collide_rect(sprite1, sprite2) if col == True: sys.exit() 

    sollte sein

     def checkCollision(self, sprite1, sprite2): col = pygame.sprite.collide_rect(sprite1, sprite2) if col == True: sys.exit() 

    Da es eine Methode ist, die an ein Objekt gebunden ist.

    Veränderung

     def checkCollision(sprite1, sprite2): 

    Nach

     def checkCollision(self, sprite1, sprite2): 

    Und du musst die Kollision bei jedem Event nicht überprüfen, den Einzug von rock.checkCollision(bird.image_b, rock.image_b) um 1 reduzieren.

    Du hast das:

     col = pygame.sprite.collide_rect(sprite1, sprite2) 

    Aber ein einfacher Weg, dies zu tun wäre einfach zu verwenden Colliderect, die eine Funktion von rect ist. Es könnte einfacher sein, dies zu versuchen:

     col=sprite1.rect.colliderect(sprite2.rect) 
    Python ist die beste Programmiersprache der Welt.