Python 和天花板碰撞?

Python 和天花板碰撞?,python,pygame,collision-detection,Python,Pygame,Collision Detection,我在这里只看到了关于与墙壁碰撞的信息,但我在让玩家的头撞到天花板上时遇到了一个问题。物体并没有撞击头部,速度被设置为0,并由于重力而加速下降,而是被吸到上面平台的顶部。为什么这不起作用?我该如何修复它?我正在学习一个教程,然后开始我自己的改编,内容创建者说这很难实现。显然,如果你沿对角线碰撞,也可能会有错误?(根据内容创建者) 提前非常感谢,老师想让我在几天内创作出一些东西呈现在人们面前,而我对任何类型的游戏引擎都没有经验 def update(self): # Game Loop -

我在这里只看到了关于与墙壁碰撞的信息,但我在让玩家的头撞到天花板上时遇到了一个问题。物体并没有撞击头部,速度被设置为0,并由于重力而加速下降,而是被吸到上面平台的顶部。为什么这不起作用?我该如何修复它?我正在学习一个教程,然后开始我自己的改编,内容创建者说这很难实现。显然,如果你沿对角线碰撞,也可能会有错误?(根据内容创建者)

提前非常感谢,老师想让我在几天内创作出一些东西呈现在人们面前,而我对任何类型的游戏引擎都没有经验

def update(self):
    # Game Loop - Update
    self.all_sprites.update()
    # check if player hits a platform
    hits = pygame.sprite.spritecollide(self.player,self.platforms , False)
    if self.player.vel.y > 0:
        if hits:
            self.player.pos.y = hits[0].rect.top
            self.player.vel.y = 0
    if self.player.vel.y < 0:
        if hits:
            self.player.rect.top = hits[0].rect.bottom
            self.player.vel.y = 0
def更新(自):
#游戏循环-更新
self.all_sprites.update()
#检查玩家是否击中平台
hits=pygame.sprite.spritecollide(self.player,self.platforms,False)
如果self.player.vel.y>0:
如果点击:
self.player.pos.y=点击[0].rect.top
self.player.vel.y=0
如果self.player.vel.y<0:
如果点击:
self.player.rect.top=点击[0]。rect.bottom
self.player.vel.y=0

将速度设置为0,您可能希望将速度设置为-1或其他负值,以强制移动“向下”离开边界条件。如果需要,也可以在相同条件下添加加速度:

if hits:
        self.player.pos.y = hits[0].rect.top
        self.player.vel.y = -1  # example velocity
        self.player.acc.y = 2   # example acceleration

可能会有一些帮助,所以您在if语句中执行self.player.vel.y=0,但该值是否在其他地方更改过?如果不是,你的If语句都不会为真,所以什么都不会改变。我有一个player类,它有速度和加速度,运动有效,我可以降落在一堆东西上(如果第一个语句有效),我只是无法让它撞到矩形框的底部并停止。问题不在于速度,而在于碰撞发生后玩家的位置。仍然无法理解。非常感谢,唯一的问题是玩家被卡在天花板上大约2秒钟,我假设玩家仍然被向上推,直到明显的重力使玩家下降。有什么解决办法吗?看起来球员的速度并没有改变?对不起,我是个新手,我开始认为这不是加速的问题,但玩家认为它又在碰撞,陷入了一个循环。编辑:没关系,我将播放器的位置y改为hits[0]。rect.bottom-30,因此没有碰撞错误,谢谢!是的,这个想法是您必须在代码中的某个地方摆脱边界条件,因此您对“player pos y to hits[0].rect.bottom-30”的建议正好做到了这一点。希望我的回答有帮助!