Pygame中组内对象的碰撞检测

2 投票
1 回答
930 浏览
提问于 2025-04-17 18:44

我正在制作一个简单的游戏,里面有一个僵尸类,我把它放在一个组里,这样我就可以无限地创建多个僵尸实例:

class zombie(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self,zombiegroup)
        self.pos=(random.randrange(5,695),random.randrange(5,455))
        self.image=zombie_image
        self.rimage=self.image
        self.rect=self.image.get_rect().move(self.pos)
        self.speed=5


    def update(self):
        zx=self.rect.topleft[0]-player.rect[0]
        zy=self.rect.topleft[1]-player.rect[1]
        rads=math.atan2(-zy, zx)
        rads %= 2*pi
        angle = math.degrees(rads)
        self.rimage=pygame.transform.rotate(self.image, angle-90)
        size=self.rimage.get_size()

        if player.rect[0]<self.rect[0]:
            self.rect[0]-=self.speed

        if player.rect[0]>self.rect[0]:
            self.rect[0]+=self.speed

        if player.rect[1]<self.rect[1]:
            self.rect[1]-=self.speed

        if player.rect[1]>self.rect[1]:
            self.rect[1]+=self.speed


        screen.blit(self.rimage, (self.rect.topleft[0]-size[0]/2,self.rect.topleft[1]-size[1]/2))

我的组就是:

zombiegroup=pygame.sprite.Group()

这个结构很简单,但我想知道怎么测试这些僵尸之间是否会相撞。否则,经过一段时间的追逐后,它们会合并成一个僵尸在屏幕上。我不知道该如何处理这个组,或者我是否应该使用pygame的组。

谢谢大家,

亚历克斯

1 个回答

1

最快但不太干净的方法是记录一些比僵尸稍微小一点的矩形,然后检查这些矩形是否碰撞。逐个像素检查会大大影响游戏的帧率,导致画面卡顿。

撰写回答