Python 太空入侵者-Pygame-碰撞

Python 太空入侵者-Pygame-碰撞,python,pygame,collision,Python,Pygame,Collision,我在pygame中制作游戏空间入侵者,我设法使敌人的子弹与玩家相撞。但我不能让游戏者弹球与敌人相撞。我想我也在做同样的事情。但它给出了下面的错误。 这时敌人用按钮标签射击,当我开始工作时,我想让敌人随机射击 第148行,在 Hit敌军=pygame.sprite.SpriteClide(敌军,bulletsPlayer,真) 第1513行,在spritecollide中 spritecollide=sprite.rect.colliderect AttributeError:“Group”对象没

我在pygame中制作游戏空间入侵者,我设法使敌人的子弹与玩家相撞。但我不能让游戏者弹球与敌人相撞。我想我也在做同样的事情。但它给出了下面的错误。 这时敌人用按钮标签射击,当我开始工作时,我想让敌人随机射击

第148行,在 Hit敌军=pygame.sprite.SpriteClide(敌军,bulletsPlayer,真)

第1513行,在spritecollide中 spritecollide=sprite.rect.colliderect AttributeError:“Group”对象没有属性“rect”

import pygame,sys
从pygame.locals导入*
随机输入
屏幕宽度=800
屏幕高度=600
FPS=60
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_模式((屏幕宽度、屏幕高度))
pygame.display.set_标题(“太空入侵者”)
clock=pygame.time.clock()
船宽=78
#颜色
黑色=(0,0,0)
蓝色=(0,0255)
绿色=(0128,0)
红色=(255,0,0)
白色=(255255)
黄色=(255255,0)
def app_quit():
pygame.quit()
系统退出(“系统退出”)
职业玩家(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“spaceship7.png”).convert()
self.image.set_colorkey(白色)#使白色透明
self.rect=self.image.get_rect()
self.rect.centerx=屏幕宽度/2
self.rect.bottom=屏幕高度-10
self.speedx=0
def更新(自我):
self.speedx=0
如果event.type==KEYDOWN和event.key==K_LEFT:
self.speedx=-2
elif event.type==KEYDOWN和event.key==K_RIGHT:
self.speedx=2
self.rect.x+=self.speedx
如果self.rect.right>屏幕宽度:
self.rect.right=屏幕宽度
如果self.rect.left<0:
self.rect.left=0
def shootPlayer(自我):
bulletPlayer=bulletPlayer(self.rect.centerx、self.rect.top)
所有精灵。添加(bulletPlayer)
bulletPlayer.add(bulletPlayer)
职业敌人(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“敌方.png”).convert()
self.image.set_颜色键(白色)
self.rect=self.image.get_rect()
self.rect.x=0
self.rect.y=random.randrange(0200)
self.speedx=random.randrange(1,2)
def更新(自我):
self.rect.x+=self.speedx
如果self.rect.right>屏幕宽度:
自校正x=50
self.rect.y=random.randrange(0250)
self.speedx=random.randrange(1,3)
如果self.rect.x>屏幕宽度:
self.kill()
def射击敌人(自身):
BulletForeign=BulletForeign(self.rect.centerx,self.rect.bottom)
所有精灵。添加(Bullet敌人)
bulletsEnemy.add(BulletForeign)
类BulletPlayer(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“bullet.png”).convert()
self.image.set_颜色键(白色)
self.rect=self.image.get_rect()
self.rect.bottom=y
self.rect.centerx=x
self.speedy=-3
def更新(自我):
self.rect.y+=自加速
如果self.rect.bottom<0:
self.kill()
类(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“bulletForeign.png”).convert()
self.image.set_颜色键(白色)
self.rect=self.image.get_rect()
self.rect.bottom=y
self.rect.centerx=x
self.speeded=2
def更新(自我):
self.rect.y+=自加速
如果self.rect.bottom>屏幕高度:
self.kill()
类墙(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“wall.png”).convert()
self.rect=self.image.get_rect()
self.rect.center=100300
allSprites=pygame.sprite.Group()
player=player()
敌人=pygame.sprite.Group()
bulletsPlayer=pygame.sprite.Group()
bulletsEnemy=pygame.sprite.Group()
墙=墙()
所有精灵。添加(玩家、敌人、bulletsPlayer、bulletsEnemy、墙)
对于范围(1)中的i:
e=敌人()
所有精灵。添加(e)
添加(e)
运行=真
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==QUIT或(event.type==KEYUP和event.key==K_ESCAPE):
运行=错误
app_quit()
elif event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
player.shootPlayer()
如果event.key==pygame.K_选项卡:
random.choice(敌方.精灵()).shoot敌军()
allSprites.update()
hitplayer=pygame.sprite.spritecollide(玩家,bulletsEnemy,True)
如果击球员:
running=app_quit()
Hit敌军=pygame.sprite.SpriteClide(敌军,bulletsPlayer,真)
如果击中敌人:
running=app_quit()
屏幕填充(黑色)
所有精灵。绘制(屏幕)
pygame.display.flip()
pygame.quit()

因为
敌人
不是
精灵
,而是
,所以使用
精灵碰撞
是错误的

你在找,所以把电话线改成

hitenemy = pygame.sprite.groupcollide(enemy, bulletsPlayer, True, True)

旁注:您已经定义了,但仍然需要在while循环中使用它来限制帧速率,例如
clock.tick(60)
hitenemy = pygame.sprite.groupcollide(enemy, bulletsPlayer, True, True)