在pygame中有没有办法检测矩形是否完全在掩码内?

时间:2013-05-18 22:33:55

标签: pygame collision mask rect

在pygame中是否有办法检测矩形是否完全在掩码内?

我知道在直接碰撞和碰撞点(直接碰撞中的点)中有矩形,但有没有办法检测矩形是否在面具内?

由于

1 个答案:

答案 0 :(得分:0)

我不相信pygame提供的任何功能都可以。由于面具的“无形”可能性,这肯定会有些挑战。可能对你有用的一种可能性是首先获得一个掩码的界限列表(一起“包含”掩码的所有点的一个rects列表),并检查你的rect是否在这些rects的任何一个内部:

bounding_rects = mask.get_bounding_rects()
for b_rect in bounding_rects:
    if b_rect.contains(test_rect):
        print "Rect is inside mask"

当然使用此解决方案,如果rect位于掩码内部,但不在任何一个特定的边界rect内,则测试将失败。这里有一个关于如何处理这个问题的想法,需要权衡一点精度:

bounding_rects = mask.get_bounding_rects()
mask_rect = bounding_rects[0].unionall(bounding_rects)
if mask_rect.contains(test_rect):
    print "Rect is inside mask"

这个解决方案将掩模的所有边界部分组合成一个矩形,这有可能覆盖区域,没有任何边界区域被覆盖(如果两个区域之间有10个像素的间隙并且联合在一起,新的矩形将包含这个差距)