Pygame 像素完美碰撞无法按预期工作

我正在使用 pygame 创建俄罗斯方块。我想使用碰撞检测,以便当游戏中的形状与之前播放的任何其他形状接触时,我可以按照俄罗斯方块的逻辑停止该形状。我遇到了使用蒙版的像素完美碰撞。我已经在线学习了一些教程,但是每次出现新形状时像素检测都会返回 true,而不是任何形状发生碰撞时。对于长代码提前抱歉,它是代码实际并且仍然包含它的游戏元素的最低限度。我认为我的方法有问题导致了这个错误。我基本上有一个功能,每当游戏中的形状与“地板”接触时,该形状就会保持在该位置并创建一个新形状。我认为我把它复杂化了,反过来又造成了这个错误。



慕尼黑的夜晚无繁华
浏览 96回答 1
1回答

慕妹3146593

问题是您没有更新精灵rect属性。精灵rect都具有位置 (0, 0)(因为您没有在对 的调用中设置它self.image.get_rect()),因此蒙版将全部重叠和碰撞。如果您阅读pygame.sprite.collide_mask的文档,您会注意到它说您的精灵需要具有mask和rect属性。您的 sprite 中有一个rect,并将其设置在 中__init__(),但是当您移动 sprite 时,它不会保持更新。您只需更改x和y属性而无需调整rect位置。collide_mask想要 a的原因rect是它使用它来确定它使用的pygame.mask.Mask.overlap()offset调用的参数。重要的是要意识到面具本身没有位置,他们需要 s来确定面具的相对位置。rect这类似于没有位置并且需要rect为它们跟踪的图像/表面。在一个单独的问题上,您将精灵发送到屏幕的方式毫无意义。您没有使用 sprite 组的能力进行绘制,更糟糕的是,您将 sprite 的图像、x 和 y 保存在单独的列表中,而不将其包含在 sprite 本身中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python