如何在表面上创建不同颜色形状的蒙版并检查重叠碰撞?
假设我的表面有一个绿色圆圈和一个红色多边形。我想知道他们在移动时什么时候会发生碰撞。
我尝试过这样的事情:
circle_color = (0,255,0)
polygon_color = (255,0,0)
circle_mask = pygame.mask.from_threshold(SURFACE, circle_color)
polygon_mask = pygame.mask.from_threshold(SURFACE, polygon_color)
if circle_mask.overlap(polygon_mask, offset=(0,0)):
print("collision")
但是没有检测到碰撞,我想我错过了一些东西。有什么方法可以做到这一点?
编辑:我正在尝试获取使用 pygame.draw() 函数创建的形状的蒙版,而不是精灵或资产。我还想获得像素完美的碰撞,因为我的多边形不是矩形
您的解决方案不起作用,因为屏幕上绘制的 2 个对象的蒙版不再重叠。如果您在第一个对象上绘制第二个对象,第一个对象的一部分将被覆盖,因此不再包含在蒙版中。
为了使您的解决方案发挥作用,您必须在绘制对象组后立即生成蒙版:
circle_color
circle_mask = pygame.mask.from_threshold(SURFACE, circle_color)
polygon_color
绘制所有对象(在带有 circle_color
的对象之上)polygon_mask = pygame.mask.from_threshold(SURFACE, polygon_color)
if circle_mask.overlap(polygon_mask, offset=(0,0)):
然而,这不是碰撞检测应该实现的方式。在每一帧中两次生成整个屏幕的掩模,然后对它们进行比较,效果不会很好。首先通过矩形碰撞检测来限制对象可能发生的碰撞,然后根据遮罩对剩余对象进行碰撞测试的算法效果最佳。 在小
pygame.Surfces
对象上绘制对象并从中获取蒙版。然后您可以使用标准掩模碰撞检测,例如这里 Pygame 掩码碰撞。