Pygame中的墙逻辑

问题描述 投票:0回答:1

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

所以,我知道我可以通过pygame.spritecollide()获取碰撞列表,它将返回玩家碰撞的对象的列表。我可以通过player.rect.clip(wall.rect)来获得“碰撞矩形”,但是如何才能使玩家从墙上退回?

所以,我有很多想法。首先是将播放器向相反的方向推回,但是如果播放器向右和向下移动,例如,与自身的垂直墙碰撞,则播放器卡住,因为只需要向左推动而不是向上推。

[第二个想法是机具向左,向左和向左移动。但是通过这种方式,我们现在不知道首先移动的方式:向左还是向底,并且顺序成为最重要的因素。

所以,我不知道应该使用哪种算法。

python algorithm pygame collision
1个回答
0
投票

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

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

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

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

有帮助吗?

© www.soinside.com 2019 - 2024. All rights reserved.