问题描述
所以在教程中学习如何使用 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