碰撞检测pygame

问题描述

我目前正在按照 youtube 教程制作一个小游戏。我通过清除运动代码遵循本教程:https://www.youtube.com/watch?v=4aZe84vvE20&t=230s&ab_channel=ClearCode 我想让我的游戏更上一层楼,并在地图周围添加一些用户必须避免的块。我想让它这样,如果汽车撞到一个街区,它就会停下来,只有当用户旋转它以远离街区,进入一个空旷的空间时才会移动。现在,在玩家类中,我创建了一个碰撞属性并使用了 pygame.sprite.spritecollide(self,blocks,True) 来检查碰撞。 blocks 变量是一个包含块的所有精灵的组。 如果发生碰撞,我将向量更改为 (0,0),这会按照预期停止汽车。然而,一旦我旋转了汽车,使其背对块,我无法想出一种方法来再次改变矢量,让它再次运行。任何帮助表示赞赏。提前致谢。

解决方法

不要将运动向量更改为 (0,0)。一旦检测到碰撞,立即改变汽车的位置,使汽车只接触物体而不与物体相交。

类似(伪代码):

if collide_at_left_side:
   car.rect.left = obstacle.rect.right

更通用的解决方案是沿碰撞的法向矢量校正位置。