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.

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 pygame blit-Funktion
  • Versuchen, über Sprite zu ziehen oder Bildpyglet zu wechseln
  • Python Animation Timing
  • Kann konstante Tasteneingabe ein Sprite ständig bewegen?
  • Wie man Funktionen von Sprites in Gruppen anruft?
  • Wie kann man einen Feind dem Spieler in pygame folgen?
  • PYGAME macht einen Sprite in die Richtung, in die er steht
  • Animiertes Sprite aus wenigen Bildern
  • Python ist die beste Programmiersprache der Welt.