Pygame 中的墙逻辑

Walls logic in Pygame

我正在用 Pygame 制作游戏,现在我一直在研究如何处理玩家和墙壁之间的碰撞。这是带有单元格的 2D RPG,其中一些单元格是墙。你从上面看世界,就像吃豆子一样。

所以,我知道我可以通过 pygame.spritecollide() 获取碰撞列表,它会 return 列出玩家碰撞的对象。我可以通过 player.rect.clip(wall.rect) 获得 "collide rectangle",但是我怎样才能让玩家从墙上回来?

所以,我有很多想法。第一个是将玩家向相反方向推回,但如果玩家向右和底部两个方向移动并撞到其右侧的垂直墙,玩家就会卡住,因为它只需要向左推,而不是向上推。

第二个思路是实现一左一下的对角移动。但是这样我们现在不知道,怎么先走:左还是下,顺序就成了最重要的因素。

所以,我不知道我应该使用什么算法。

如果您知道单元格中心的位置和玩家的位置,您可以计算出该时间点与墙的 x 距离和 y 距离。可不可以在那个点取每个距离的绝对值,然后取最大值作为推动玩家进入的方向

例如玩家与墙的右侧发生碰撞,因此在 y 方向上距墙中心的距离应小于 x 方向的距离。 因此你知道玩家撞到墙的左侧或右侧而不是顶部,这意味着推动应该向右或向左。

如果玩家的移动以 [x, y] 的形式存储,那么知道是向左推还是向右推并不重要,因为在 x 轴上翻转移动方向会给出正确的结果。

因此,在本例中,推动应沿 x 方向 例如player.vel_x = -player.vel_x。 这将使 y 轴上的运动保持不变,因此希望不会导致您提到的问题。

有帮助吗?