2

现在,我在 pygame 中有一个碰撞检测,它检查两个矩形是否重叠......我要做的是检查表面的透明度,如果 alpha 值小于 10,则阻止玩家走进它..

目前,我正在这样做:

for i in range(0,self.rect.w):
    for j  in range(0,self.rect.h):
        if player.rect.collidepoint((i,j)) and self.image.get_at((i,j))[3]<10:
            #STOP PLAYER

但这对处理器来说是一个真正的痛苦。有没有另一种方法来获取pygame中的碰撞像素坐标?

4

1 回答 1

0

使用pygame.mask.Mask对象和overlap()overlap_mask()

overlap()

返回此掩码其他掩码之间遇到的第一个交点。
[...]
返回交点或者None如果没有交点。

overlap_mask()

返回一个与此掩码大小相同的掩码,包含此掩码其他掩码之间的重叠设置位。

可以使用以下方式创建pyame.Surface掩码pygame.mask.from_surface()-

例如:

player_mask = pygame.mask.from_surface(player.image)
self.mask = pygame.mask.from_surface(self.image)
offset = (player.rect.x - self.rect.x), (player.rect.y - self.rect.y)
first_intersection_point = self.mask.overlap(player_mask , offset)
if first_intersection_point:
    print("hit")
于 2020-12-22T12:00:27.150 回答