【发布时间】:2020-09-15 10:00:33
【问题描述】:
我在主精灵周围创建了一个 pygame 蒙版。我的游戏由带有碰撞矩形的瓷砖组成。在他们周围设置。
如何检查主精灵上的蒙版是否与矩形碰撞。我的世界中的一个瓷砖,而不必创建更多的面具(因为那是低效的)?我知道 pygame 中有 'collide rect' 和 'collide mask' 功能。是遮罩和矩形的碰撞函数吗?
【问题讨论】:
标签: python-3.x pygame
我在主精灵周围创建了一个 pygame 蒙版。我的游戏由带有碰撞矩形的瓷砖组成。在他们周围设置。
如何检查主精灵上的蒙版是否与矩形碰撞。我的世界中的一个瓷砖,而不必创建更多的面具(因为那是低效的)?我知道 pygame 中有 'collide rect' 和 'collide mask' 功能。是遮罩和矩形的碰撞函数吗?
【问题讨论】:
标签: python-3.x pygame
遮罩和矩形是碰撞函数吗?
不,但您可以自己编写一个并将其用作组碰撞函数的回调:
def collide_mask_rect(left, right):
xoffset = right.rect[0] - left.rect[0]
yoffset = right.rect[1] - left.rect[1]
try:
leftmask = left.mask
except AttributeError:
leftmask = pygame.mask.Mask(left.size, True)
try:
rightmask = right.mask
except AttributeError:
rightmask = pygame.mask.Mask(right.size, True)
return leftmask.overlap(rightmask, (xoffset, yoffset))
蒙版的真正性能问题是在运行时从表面创建它们(就像 collide_mask 对 from_surface 所做的那样,但创建填充蒙版应该不会那么糟糕。
但如果性能成为问题,请考虑缓存遮罩,将它们分配给精灵或提前在精灵中创建它们。
【讨论】: