现在,我在pygame中有一个碰撞检测,可以检查两个rctangles是否重叠......我试图做的是检查表面的透明度,如果 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中获取碰撞像素坐标?
使用pygame.mask.Mask
对象和overlap()
或overlap_mask()
。
overlap()
:
返回此掩码与其他掩码之间遇到的第一个交点.
[...]返回交点或None
点(如果没有交点)。
overlap_mask()
:
返回一个掩码,大小与此掩码相同,包含此掩码和其他掩码之间的重叠集位。
可以从具有pygame.mask.from_surface()
的pyame.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")