问题描述
所以我再次尝试制作一个小射击游戏,你必须躲避或射击敌人才能获胜。一旦你被敌人击中,游戏就结束了,我设法让它发挥作用。然而我现在的问题是我需要一种方法来使一旦敌方类和导弹类相互碰撞,它们就会消失。但我想不出办法做到这一点。
class Enemy(pg.sprite.Sprite):
def __init__(self):
super(Enemy,self).__init__()
self.surf = pg.image.load("Enemy.png").convert()
self.surf = pg.transform.smoothscale(self.surf,(75,75))
self.surf.set_colorkey((255,255,255),RLEACCEL)
self.rect = self.surf.get_rect(center=(
random.randint(SCREEN_WIDTH + 20,SCREEN_WIDTH + 100),random.randint(0,SCREEN_HEIGHT),)
)
self.speed = random.randint(5,15)
def update(self):
self.rect.move_ip(-self.speed,0)
if self.rect.right < 0:
self.kill()
class Missile(pg.sprite.Sprite):
def __init__(self,pos):
super(Missile,self).__init__()
self.surf = pg.image.load("Missile.png").convert()
self.surf = pg.transform.smoothscale(self.surf,(20,20))
self.surf.set_colorkey((0,0),RLEACCEL)
self.rect = self.surf.get_rect(center=pos)
def update(self):
self.rect.move_ip(10,0)
if self.rect.right < 0:
self.kill()
解决方法
当两个物体碰撞时调用 pygame.sprite.Sprite.kill()
。 kill
从包含它的所有组中删除一个精灵。
可以使用 pygame.sprite.collide_rect()
检测碰撞。我下面的 enemy
是 Enemy
的实例,missile
是 Missile
的实例:
if (pygame.sprite.collide_rect(enemy,missile):
enemy.kill()
missile.kill()
如果您的 pygame.sprite.Group
为 missiles
,则可以使用 pygame.sprite.spritecollide()
。当 dokill 参数为 True
时,碰撞导弹将被自动杀死:
if pygame.sprite.spritecollide(enemy,missiles,True):
enemy.kill()
如果您有一组 enemies
和一组 missiles
,您可以使用 pygame.sprite.groupcollide()
。当 dokill1 或 doKill2 为 True
时,相应的对象将被自动杀死:
pygame.sprite.groupcollide(enemies,True,True)