Python Pygame碰撞不工作-Pygame.sprite.collide_rect()

Python Pygame碰撞不工作-Pygame.sprite.collide_rect(),python,pygame,collision-detection,collision,Python,Pygame,Collision Detection,Collision,我正在制作一个太空射击游戏,在这个游戏中,当一个外星人精灵与一个玩家精灵相撞时,我希望游戏结束。当为碰撞编写代码时,它并没有结束游戏。有人能帮我吗 main.py # IMPORTS import pygame from sprites import * from config import * # GAME class Game(): def __init__(self): # INIT PYGAME pygame.init() pyg

我正在制作一个太空射击游戏,在这个游戏中,当一个
外星人
精灵与一个
玩家
精灵相撞时,我希望游戏结束。当为碰撞编写代码时,它并没有结束游戏。有人能帮我吗

main.py

# IMPORTS
import pygame
from sprites import *
from config import *

# GAME
class Game():
    def __init__(self):
        # INIT PYGAME
        pygame.init()
        pygame.mixer.init()

        pygame.display.set_caption(TITLE)

        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        self.clock = pygame.time.Clock()
        self.running = True

        self.player = Player()

    # NEW GAME
    def new(self):
        self.allSprites = pygame.sprite.Group()
        self.allAliens = pygame.sprite.Group()

        for amount in range(ALIEN_AMOUNT):
            self.alien = Alien()
            self.allAliens.add(self.alien)
            self.allSprites.add(self.alien)

        self.allSprites.add(self.player)

        self.run()

    # RUN GAME
    def run(self):
        self.playing = True

        while self.playing:
            self.clock.tick(FPS)

            self.events()
            self.update()
            self.draw()
            self.animate()
            self.collision()

    # DRAW
    def draw(self):
        self.screen.fill(BLACK)

        self.allAliens.draw(self.screen)
        self.allSprites.draw(self.screen)
        pygame.display.update()

    # ANIMATE
    def animate(self):
        pass

    # DETECT COLLISION
    def collision(self):
        # player collition with alien
        hits = pygame.sprite.collide_rect(self.alien, self.player)

        if hits:
            self.playing = False
            self.running = False

    # CHECK FOR EVENTS
    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                if self.playing:
                    self.playing = False

                self.running = False

    # UPDATE GAME
    def update(self):
        self.allSprites.update()

    # GAME OVER
    def gameOver(self):
        pass

    # START SCREEN
    def startScreen(self):
        pass

    # END SCREEN
    def endScreen(self):
        pass

game = Game()
game.startScreen()

while game.running:
    game.new()
    game.gameOver()

# QUIT
pygame.quit()
quit()
雪碧

# IMPORTS
import pygame, random
from config import *

# PLAYER
class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("assets/img/player.png").convert()
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()
        self.rect.x = WIDTH / 2
        self.rect.y = HEIGHT - 50
        self.velX = 0

    def animate(self):
        self.rect.x += self.velX

    def control(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            self.velX = -5
        elif keys[pygame.K_RIGHT]:
            self.velX = 5
        else:
            self.velX = 0

    def collision(self):
        # collision with walls
        if self.rect.left < 0:
            self.rect.left = 0
        elif self.rect.right > WIDTH:
            self.rect.right = WIDTH

    def update(self):
        self.animate()
        self.control()
        self.collision()

# ALIEN
class Alien(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("assets/img/rsz_alien.png").convert()
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(10, WIDTH - self.rect.w - 10)
        self.rect.y = random.randrange(-100, -10)
        self.velY = random.randrange(2, 8)

    def animate(self):
        self.rect.y += self.velY

    def collision(self):
        if self.rect.y > HEIGHT:
            self.reset()

    def update(self):
        self.animate()
        self.collision()

    def reset(self):
        self.rect.x = random.randrange(0, WIDTH)
        self.rect.y = random.randrange(-100, -10)
        self.velY = random.randrange(2, 8)
#导入
导入pygame,随机
从配置导入*
#玩家
职业玩家(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“assets/img/player.png”).convert()
self.image.set_颜色键(黑色)
self.rect=self.image.get_rect()
self.rect.x=宽度/2
自校正y=高度-50
self.velX=0
def动画(自):
self.rect.x+=self.velX
def控制(自):
keys=pygame.key.get_pressed()
如果键[pygame.K_左]:
self.velX=-5
elif keys[pygame.K_RIGHT]:
self.velX=5
其他:
self.velX=0
def碰撞(自):
#撞墙
如果self.rect.left<0:
self.rect.left=0
elif self.rect.right>宽度:
self.rect.right=宽度
def更新(自我):
self.animate()
自我控制
自碰撞
#外星的
类外星人(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“assets/img/rsz_alien.png”).convert()
self.image.set_颜色键(白色)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(10,宽度-self.rect.w-10)
self.rect.y=random.randrange(-100,-10)
self.velY=random.randrange(2,8)
def动画(自):
自校正y+=自校正
def碰撞(自):
如果自校正y>高度:
self.reset()
def更新(自我):
self.animate()
自碰撞
def重置(自):
self.rect.x=random.randrange(0,宽度)
self.rect.y=random.randrange(-100,-10)
self.velY=random.randrange(2,8)

有一个
config.py
文件,但我认为这个问题不需要它

您只测试与单个外星人的碰撞(这将是您创建并分配给
self.alien
的最后一个)。您需要迭代所有外星人,并测试玩家和每个外星人之间的冲突

def collision(self):
    # player collision with each alien
    for alien in self.allAliens:
        hits = pygame.sprite.collide_rect(alien, self.player)

        if hits:
            self.playing = False
            self.running = False