【问题标题】:Pygame masks Python [duplicate]Pygame掩盖Python [重复]
【发布时间】:2021-06-05 05:41:29
【问题描述】:

所以在教程中学习如何使用 pygame 制作游戏,该游戏需要碰撞,所以他们创建了 pygame 蒙版对象,但我不明白为什么要检查两个对象之间的碰撞,我们需要找到 x 和y坐标有人可以解释一下为什么我们需要两个对象之间的x和y坐标距离

这里是代码碰撞函数:

def collide(obj1, obj2):
    offset_x = obj2.x - obj1.x
    offset_y = obj2.y - obj1.y
    return obj1.mask.overlap(obj2.mask, (offset_x, offset_y)) != None # (x, y) it will return if collison else false

谁能解释一下pygame中面具系统的工作原理以及为什么我们需要offset_xoffset_y

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    从图像创建蒙版。掩码只是一个带有布尔值的网格。掩码中的一个场对应于表面中的一个像素。如果是True,则对应图像中的像素属于彩色精灵。如果False,则对应图像中的像素属于背景。 pygame.mask.Mask 对象没有位置。
    pygame.mask.Mask.overlap 方法检查对象在屏幕上放置时是否重叠。由于对象不会完全放置在同一位置,因此您需要指定偏移量。请参阅PyGame collision with masks is not workingCollision between masks in PyGame

    +---------------+
    | mask 1   .    |
    |         oy    |
    |          .    |
    |... ox ...+-------------+
    |          |    |        |
    |          |    |        |
    +----------|----+        |
               |             |
               | mask 2      |
               +-------------+
    

    oxoffset_x
    oyoffset_y

    最小示例: repl.it/@Rabbid76/PyGame-SurfaceMaskIntersect

    另见:Mask


    当您使用pygame.sprite.Sprite 对象时,您不需要计算偏移量。您可以使用 pygame.sprite.collide_mask,它计算来自 .rect 属性的偏移量。见How can I made a collision mask?Pygame mask collision

    最小示例: repl.it/@Rabbid76/PyGame-SpriteMask

    另见Sprite mask

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2020-08-04
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多