Python pygame中的奇怪bug

Python pygame中的奇怪bug,python,pygame,collision-detection,collision,Python,Pygame,Collision Detection,Collision,你好,我现在在platformer的一个部门工作。 当我从一个平台跳到另一个平台时,我遇到了一个奇怪的问题,它工作正常。然而,每当我从其中一个跳到另一个的底部时,我的角色精灵就会从屏幕上向上飞离。我觉得这是因为没有正确编程播放器和平台之间的碰撞,因为我不知道如何编程。以下是我目前所做的: collide = pygame.sprite.spritecollide(player, platform_list, False) if collide: player.re

你好,我现在在platformer的一个部门工作。 当我从一个平台跳到另一个平台时,我遇到了一个奇怪的问题,它工作正常。然而,每当我从其中一个跳到另一个的底部时,我的角色精灵就会从屏幕上向上飞离。我觉得这是因为没有正确编程播放器和平台之间的碰撞,因为我不知道如何编程。以下是我目前所做的:

    collide = pygame.sprite.spritecollide(player, platform_list, False)
    if collide:
        player.rect.y-=1
如果有人能为玩家和平台之间的碰撞检测提出更好的方法,请说出来,谢谢。 不知何故,这个bug允许玩家越过屏幕的边界,我已经为屏幕的4个角(第322行和第212行)设置了边界,但是这些障碍通常是存在的

这是我的完整游戏代码:


编程图形时,y坐标会反转,因此y坐标值在平台下方较高,在平台上方较低

您当前的代码会将玩家移动到平台内部,这将再次激活碰撞,并将其进一步推到平台内部

你应该说:

    collide = pygame.sprite.spritecollide(player, platform_list, False)
    if collide:
        player.rect.y += 1
这里需要注意的是从“-=1”到“+=1”的变化

这将使玩家精灵向下移动,而不是在平台内向上移动


我还有一个碰撞检测的例子,我曾经在我自己的面向对象程序中实现过这个方法,但是我丢失了我自己的程序。我不记得是谁拥有这个程序因为我很久以前就发现了,我希望它能帮助您从我所说的中看到一种公平的做法。

那么您如何区分平台的四个角之间的碰撞,因为不同的角肯定需要不同的结果。@user2921888您可以检查不同的对象移动的方向,这就是我链接的代码中所做的。平台没有移动,但它正在检查玩家的方向,并将对此采取行动。好吧,我认为它起了作用,但在这样做之后,我的跳转变得很奇怪:if event.type==pygame.KEYDOWN:if collide and event.key==pygame.\u UP:player.change\u y-=5 if player.change\u y==7:player.change_y=False使角色从屏幕上向上跳跃screen@user2921888试着看一下我发送的代码,它包含一个运行良好的跳转和碰撞检测,因此我建议您查看它,因为正是该代码帮助我学习如何进行碰撞。虽然我自己不想写点东西,但我真的记不起怎么做了。