我可以不使用Sprites来使用.colliderect()吗? -PyGame

时间:2019-03-02 16:41:40

标签: python pygame collision-detection

我正在尝试做一个小型的无尽奔跑者,并完成大部分工作,剩下的唯一事情就是碰撞检测。 我知道()函数,但无法正常工作。我可能做错了,但是我不知道如何解决它。

现在我有一个像这样的播放器类:

class Player:
def __init__(self):
    self.size = (20, 40)
    self.color = white
    self.pos = [200, 330]
    self.shape_body = (self.pos, self.size)
    self.rect = pygame.Rect(self.shape_body)

和障碍

class obstacle_ground1:

def __init__(self):
    self.pos = [1000, 330]
    self.size = (40, 40)
    self.shape = (self.pos, self.size)
    self.rect = pygame.Rect(self.shape)
    self.color = white

(我有不同的,这就是为什么有1的原因) 所有障碍物都在列表中,我想检查像这样的碰撞

def Check_if_dead(self):
    return self.rect.collidedict(obstacles[0].rect)

根据Player类

但是随后我遇到一个类型错误:

  

参数必须是带有rectstyle键的字典。

我现在知道我可以并且也许应该使用精灵,但是我不想重做其他所有事情,因此,如果您知道解决方法或者只是发现我犯了一个愚蠢的错误,请告诉我

1 个答案:

答案 0 :(得分:3)

您收到错误消息

  

参数必须是带有rectstyle键的字典。

因为使用的方法错误。

如果要测试2个矩形是否相交,则必须使用方法pygame.Rect.colliderect而不是pygame.Rect.collidedict

return self.rect.collidedict(obstacles[0].rect)

return self.rect.colliderect(obstacles[0].rect)

collidedict的参数必须是字典。该方法将测试字典中的矩形之一是否相交。
colliderect的参数是一个矩形,该方法测试两个矩形是否重叠。