Python 3.x 如何检查遮罩和矩形之间的冲突。在游戏中?

Python 3.x 如何检查遮罩和矩形之间的冲突。在游戏中?,python-3.x,pygame,Python 3.x,Pygame,我已经在主精灵周围创建了一个pygame面具。我的游戏由带有碰撞矩形的平铺组成。在他们周围建立 如何检查主精灵上的遮罩是否与矩形发生碰撞。在我的世界中,我的一块瓷砖不需要创建更多的遮罩(因为这是低效的)?我知道pygame中有“collide rect”和“collide mask”函数。是掩码和rect的冲突函数吗 是掩码和rect的冲突函数吗 不,但您可以自己编写一个,并将其用作组碰撞函数的回调: def collide_mask_rect(left, right): xoffset

我已经在主精灵周围创建了一个pygame面具。我的游戏由带有碰撞矩形的平铺组成。在他们周围建立

如何检查主精灵上的遮罩是否与矩形发生碰撞。在我的世界中,我的一块瓷砖不需要创建更多的遮罩(因为这是低效的)?我知道pygame中有“collide rect”和“collide mask”函数。是掩码和rect的冲突函数吗

是掩码和rect的冲突函数吗

不,但您可以自己编写一个,并将其用作组碰撞函数的回调:

def collide_mask_rect(left, right):
    xoffset = right.rect[0] - left.rect[0]
    yoffset = right.rect[1] - left.rect[1]
    try:
        leftmask = left.mask
    except AttributeError:
        leftmask = pygame.mask.Mask(left.size, True)
    try:
        rightmask = right.mask
    except AttributeError:
        rightmask = pygame.mask.Mask(right.size, True)
    return leftmask.overlap(rightmask, (xoffset, yoffset))
遮罩的真正性能问题是在运行时从曲面创建遮罩(与曲面类似,但创建填充遮罩应该没有那么糟糕)

但如果性能成为一个问题,可以考虑缓存这些掩码,将它们分配给精灵,或者预先在精灵中创建它们。