微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检测与敌人相撞的导弹?

如何解决如何检测与敌人相撞的导弹?

所以我再次尝试制作一个小射击游戏,你必须躲避或射击敌人才能获胜。一旦你被敌人击中,游戏就结束了,我设法让它发挥作用。然而我现在的问题是我需要一种方法来使一旦敌方类和导弹类相互碰撞,它们就会消失。但我想不出办法做到这一点。

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() 检测碰撞。我下面的 enemyEnemy 的实例,missileMissile 的实例:

if (pygame.sprite.collide_rect(enemy,missile):
    enemy.kill()
    missile.kill()

如果您的 pygame.sprite.Groupmissiles,则可以使用 pygame.sprite.spritecollide()。当 dokill 参数为 True 时,碰撞导弹将被自动杀死

if pygame.sprite.spritecollide(enemy,missiles,True):
    enemy.kill()

如果您有一组 enemies 和一组 missiles,您可以使用 pygame.sprite.groupcollide()。当 dokill1doKill2True 时,相应的对象将被自动杀死

pygame.sprite.groupcollide(enemies,True,True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。