如何解决Pygame 掩码 Python
所以在教程中学习如何使用 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_x
,offset_y
解决方法
蒙版是根据图像创建的。掩码只是一个带有布尔值的网格。掩码中的一个字段对应于表面中的一个像素。如果为True
,则对应图像中的像素属于彩色精灵。如果 False
,则对应图像中的像素属于背景。 pygame.mask.Mask
对象没有位置。pygame.mask.Mask.overlap
方法检查对象放置在屏幕上时是否重叠。由于对象不会完全放置在同一位置,因此您需要指定偏移量。请参阅 PyGame collision with masks is not working 和 Collision between masks in PyGame。
+---------------+
| mask 1 . |
| oy |
| . |
|... ox ...+-------------+
| | | |
| | | |
+----------|----+ |
| |
| mask 2 |
+-------------+
ox
是 offset_x
oy
是 offset_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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。