gpt4 book ai didi

python - 如何在 python pygame 中减少掩码碰撞检测的延迟

转载 作者:行者123 更新时间:2023-12-05 06:51:40 27 4
gpt4 key购买 nike

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

for i in range(numMoon):
moonRect = pygame.Rect(moonX[i], moonY[i], int(100*moonScale[i]), int(100*moonScale[i]))
if moonRect.colliderect(shipRect):
moonMask = pygame.mask.from_surface(moon)
offset_x = shipRect.x - moonRect.x
offset_y = shipRect.y - moonRect.y
crash = moonMask.overlap(shipMask, (offset_x, offset_y))
if crash:
print('moon')

最佳答案

Surface 创建Mask 是一项昂贵的操作。不要生成 pygame.mask在循环。加载图像后直接在初始化期间创建 mask :

moon = pygame.image.load(...)
moonMask = pygame.mask.from_surface(moon)

使用预先生成的掩码

for i in range(numMoon):
moonRect = pygame.Rect(moonX[i], moonY[i], int(100*moonScale[i]), int(100*moonScale[i]))
if moonRect.colliderect(shipRect):
offset_x = shipRect.x - moonRect.x
offset_y = shipRect.y - moonRect.y
crash = moonMask.overlap(shipMask, (offset_x, offset_y))
if crash:
print('moon')

关于python - 如何在 python pygame 中减少掩码碰撞检测的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66114913/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com