如何在python pygame中减少掩码冲突检测的滞后性

如何在python pygame中减少掩码冲突检测的滞后性,python,pygame,mask,Python,Pygame,Mask,我正在尝试为我制作的游戏制作一个碰撞检测系统。这段代码在我检测物体较小时的碰撞时效果很好,但现在,一旦我制作了一个直径可达1000像素的月球遮罩,它就开始滞后于我的计算机。IVE试图绘制一个月球轮廓的第二图像,用于检测碰撞,但在进一步测试时,它仍然会检测到轮廓的中间(在图像的透明部分)中的碰撞,并且没有帮助滞后。我还试图使轮廓图像的像素减少,但保持相同的大小。这些图像在屏幕上向下移动,就像一艘船在屏幕上移动以躲避它们一样。我需要像素完美的碰撞 如果有人能告诉我如何减少延迟,或者用其他方法检测我的

我正在尝试为我制作的游戏制作一个碰撞检测系统。这段代码在我检测物体较小时的碰撞时效果很好,但现在,一旦我制作了一个直径可达1000像素的月球遮罩,它就开始滞后于我的计算机。IVE试图绘制一个月球轮廓的第二图像,用于检测碰撞,但在进一步测试时,它仍然会检测到轮廓的中间(在图像的透明部分)中的碰撞,并且没有帮助滞后。我还试图使轮廓图像的像素减少,但保持相同的大小。这些图像在屏幕上向下移动,就像一艘船在屏幕上移动以躲避它们一样。我需要像素完美的碰撞 如果有人能告诉我如何减少延迟,或者用其他方法检测我的飞船是否在圆圈内,那将是一个很大的帮助:)

范围内i的
(nummon):
moonRect=pygame.Rect(moonX[i],moonY[i],int(100*moonScale[i]),int(100*moonScale[i]))
如果moonRect.collide rect(shipRect):
moonMask=pygame.mask.from_表面(月亮)
偏移量x=shipRect.x-moonRect.x
偏移量_y=shipRect.y-moonRect.y
碰撞=月罩。重叠(船罩,(偏移量x,偏移量y))
如果崩溃:
打印(“月亮”)
从表面创建遮罩是一项昂贵的操作。不要在循环中生成。加载图像后,直接在初始化期间创建遮罩:

moon=pygame.image.load(…)
moonMask=pygame.mask.from_表面(月亮)
使用预先生成的掩码

范围内i的
(nummon):
moonRect=pygame.Rect(moonX[i],moonY[i],int(100*moonScale[i]),int(100*moonScale[i]))
如果moonRect.collide rect(shipRect):
偏移量x=shipRect.x-moonRect.x
偏移量_y=shipRect.y-moonRect.y
碰撞=月罩。重叠(船罩,(偏移量x,偏移量y))
如果崩溃:
打印(“月亮”)

Ok thx这减少了一些延迟,但是当rect碰撞时它仍然有一点延迟。它不再准确地检测if碰撞:我忘了提到月亮的Y坐标将在屏幕上向下移动,所以这会影响遮罩吗?@Theo不,遮罩不受影响。可能是交叉区域在增加。掩码冲突非常耗时。我看不到任何进一步的改进。现在只要shipRect与moonRect发生碰撞,它就会打印“moon”,稍微有点滞后。当我每次创建一个新的遮罩时,它将是像素完美的碰撞,只有在矩形碰撞时才有很大的延迟。有没有一种方法可以测试一个遮罩与一个圆的碰撞以减少延迟,或者测试一个遮罩是否在距离月球中心一定距离内?@Theo你只需要在月球表面发生变化时创建一个新的遮罩!表面的位置与遮罩无关。您有一个基本的误解。@Theo注意,
print
调用也会导致延迟