【问题标题】:How to check collisions between a mask and rect. in pygame?如何检查遮罩和矩形之间的碰撞。在pygame中?
【发布时间】:2020-09-15 10:00:33
【问题描述】:

我在主精灵周围创建了一个 pygame 蒙版。我的游戏由带有碰撞矩形的瓷砖组成。在他们周围设置。

如何检查主精灵上的蒙版是否与矩形碰撞。我的世界中的一个瓷砖,而不必创建更多的面具(因为那是低效的)?我知道 pygame 中有 'collide rect' 和 'collide mask' 功能。是遮罩和矩形的碰撞函数吗?

【问题讨论】:

    标签: python-3.x pygame


    【解决方案1】:

    遮罩和矩形是碰撞函数吗?

    不,但您可以自己编写一个并将其用作组碰撞函数的回调:

    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_maskfrom_surface 所做的那样,但创建填充蒙版应该不会那么糟糕。

    但如果性能成为问题,请考虑缓存遮罩,将它们分配给精灵或提前在精灵中创建它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2023-03-16
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      相关资源
      最近更新 更多