pygame 遮罩重叠不同颜色的形状?

问题描述 投票:0回答:1

如何在表面上创建不同颜色形状的蒙版并检查重叠碰撞?

假设我的表面有一个绿色圆圈和一个红色多边形。我想知道他们在移动时什么时候会发生碰撞。

我尝试过这样的事情:

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() 函数创建的形状的蒙版,而不是精灵或资产。我还想获得像素完美的碰撞,因为我的多边形不是矩形

python pygame collision
1个回答
0
投票

您的解决方案不起作用,因为屏幕上绘制的 2 个对象的蒙版不再重叠。如果您在第一个对象上绘制第二个对象,第一个对象的一部分将被覆盖,因此不再包含在蒙版中。
为了使您的解决方案发挥作用,您必须在绘制对象组后立即生成蒙版:

  1. 使用
    circle_color
  2. 绘制所有对象
  3. circle_mask = pygame.mask.from_threshold(SURFACE, circle_color)
  4. polygon_color
    绘制所有对象(在带有
    circle_color
    的对象之上)
  5. polygon_mask = pygame.mask.from_threshold(SURFACE, polygon_color)
  6. if circle_mask.overlap(polygon_mask, offset=(0,0)):

然而,这不是碰撞检测应该实现的方式。在每一帧中两次生成整个屏幕的掩模,然后对它们进行比较,效果不会很好。首先通过矩形碰撞检测来限制对象可能发生的碰撞,然后根据遮罩对剩余对象进行碰撞测试的算法效果最佳。 在小

pygame.Surfces
对象上绘制对象并从中获取蒙版。然后您可以使用标准掩模碰撞检测,例如这里 Pygame 掩码碰撞

© www.soinside.com 2019 - 2024. All rights reserved.