我想与pygame进行特殊的碰撞。我有一个Ball
精灵和一个Block
精灵,我想知道球撞到了哪一侧。
也许可以使用pygame.sprite.groupcollide()
和自定义collided
来调用它。但是我找不到这个问题的答案。有没有办法做到这一点?
答案 0 :(得分:1)
是的,有可能。你对碰撞的论证也是正确的。
你需要做的是编写一个函数,它将获取2个精灵并返回一个布尔值。
在此功能中,您可以检查它们碰撞的哪一侧,并通知精灵碰撞,甚至只有在发生某种类型的碰撞时才返回true。
由于每个精灵都有一个矩形属性,你可以检查它们的移动方式和位置,以查看它们碰撞的位置。
例如,如果我们有两个精灵,A,B一个向上,另一个向左,它们可以以两种方式碰撞。您可以测试A是否从顶部发生碰撞,如果在碰撞后,第二个精灵高于A。
答案 1 :(得分:1)
这是我找到的pygame文档的链接:
如果您使用带搜索页功能的浏览器搜索:
pygame.sprite.spritecollide()
我对pygame不太好,但要了解基础知识。我认为正确的功能是
pygame.sprite.collide_mask()
正如文档所说:
“返回掩码碰撞的掩码上的第一个点,如果没有碰撞,则返回None。
通过测试其位掩码是否重叠来测试两个精灵之间的碰撞。如果精灵具有“掩码”属性,该属性用作掩码,否则将从精灵图像创建掩码。打算作为碰撞回调函数传递给*碰撞函数。精灵必须具有“rect”和可选的“mask”属性。
如果要多次检查碰撞,您应该考虑在加载时为精灵创建一个遮罩。这将提高性能,否则这可能是一个昂贵的功能,因为它会在每次检查碰撞时创建掩码。“
希望它有所帮助。
-Harry