首页 > 解决方案 > 我可以在不使用 Sprites 的情况下使用 .colliderect() 吗?-Py游戏

问题描述

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

现在我有一个像这样的玩家类:

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。

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

标签: pythonpygamecollision-detection

解决方案


您收到错误消息

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

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

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

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

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

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


推荐阅读