Wie Verwenden von Sprite-Kollisionen in Pygame

Ich bin ein sehr einfaches Spiel, wo der Vogel (Spieler) hat dodge die Felsen, und wenn es getroffen wird, durch den rock, den Sie verlieren. Ich bin versucht, pygame.sprite.collide_rect() zu sagen, wenn Sie berührt, aber ich kann nicht scheinen, um herausfinden, wie man richtig nutzen es.

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 ihn starten will sagt er mir es dauert nur 2 Argumente, und ich gab drei, wenn ich versuche zu lösen, bekomme ich alle Arten von verschiedenen Fehlermeldungen.

wenn collide_rect ist eine Instanz-Methode der sprite -, dann müssen Sie es so nennen: sprite1.collide_rect(sprite2). Ob es eine Instanz-Methode von "rect", dann rufen Sie es auf sprite1 rect. Und so weiter.
im Versuch, es zu tun wie dieser if pygame.sprite.collide_rect(rock.image_b, bird.image_b)==True: sys.exit() aber ich bin immer diese Fehlermeldung Traceback (most recent call last): File "C:\Python27\BIRDGAME.py", line 111, in <module> if pygame.sprite.collide_rect(rock.image_b, bird.image_b)==True: File "C:\Python27\lib\site-packages\pygame\sprite.py", line 1147, in collide_rect return left.rect.colliderect(right.rect) AttributeError: 'pygame.Rect' object has no attribute 'rect'
Hast du die Fehlermeldung Lesen? Es sagt, dass Sie es übergeben Sie einen parameter mit kein Attribut rect und es es erwartet haben. So müssen Sie übergeben einen parameter mit dem Attribut rect.
ohhhh sorry ich bin ein Anfänger danke!

InformationsquelleAutor Serial | 2013-04-26

Schreibe einen Kommentar