我可以在不使用Sprite的情况下使用.colliderect()吗? -PyGame

问题描述 投票:2回答:1

我试图让一个小的无尽的跑步者并完成大部分工作,唯一剩下的就是碰撞检测。我知道()函数但无法使其工作。我可能只是做错了但是我没有想法如何解决它。

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

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键的dict。

我现在知道我可以也许应该使用精灵但是我不想重做其他所有内容所以如果你知道方法或者只是注意到我犯了一个愚蠢的错误请告诉我

python pygame collision-detection
1个回答
3
投票

您收到错误消息

参数必须是带有rectstyle键的dict。

因为你使用的是错误的方法。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.