首页 > 解决方案 > Pygame中的墙逻辑

问题描述

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

所以,我知道我可以获取碰撞列表,pygame.spritecollide()它会返回玩家碰撞的对象列表。我可以得到“碰撞矩形” player.rect.clip(wall.rect),但是我怎样才能让玩家从墙上回来呢?

所以,我有很多想法。第一种是反方向推玩家,但如果玩家去,例如,向右和底部方向并与自身右侧的垂直墙发生碰撞,玩家就会卡住,因为它只需要向左推,而不是向上推。

第二个想法是实现像一左一底的对角线移动。但是这种方式我们现在不知道,如何先移动:向左或向下,顺序成为最重要的因素。

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

标签: pythonalgorithmpygamecollision

解决方案


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

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

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

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

这有帮助吗?


推荐阅读