【问题标题】:Weird bug in pygamepygame中的奇怪错误
【发布时间】:2013-10-28 03:26:41
【问题描述】:

您好,我目前正在开发一个平台游戏。 当我从一个平台跳到另一个平台时,我遇到了一个奇怪的问题,它工作正常。然而,每当我从一个跳下并撞到另一个的底部时,我的角色精灵就会向上飞出屏幕。我觉得这是由于没有正确编程玩家和平台之间的碰撞,因为我不知道怎么做。这是我目前所做的:

    collide = pygame.sprite.spritecollide(player, platform_list, False)
    if collide:
        player.rect.y-=1

如果有人可以提出更好的方法来检测播放器和平台之间的碰撞,请说出来,谢谢。 不知何故,这个错误允许玩家越过我为屏幕的 4 个角设置的屏幕边界(第 322 和 212 行),但是这些障碍通常

这是我的完整游戏代码:

http://pastebin.com/cae4u5NR

【问题讨论】:

    标签: python pygame collision-detection collision


    【解决方案1】:

    在对图形进行编程时,y 坐标是相反的,因此 y 坐标值会在平台下方较高而在平台上方较低。

    您当前的代码会将玩家向上移动到平台内,这将再次激活碰撞并将其推到平台内更远的位置。

    你应该说:

        collide = pygame.sprite.spritecollide(player, platform_list, False)
        if collide:
            player.rect.y += 1
    

    这里要注意的是从“-= 1”到“+= 1”的变化。

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

    我也有this 的碰撞检测示例,我曾在自己的面向对象程序中实现过该方法,但我丢失了自己的程序。我不记得谁拥有这个程序,因为我很久以前就发现了它,我希望它可以帮助你从我所说的中看到一个公平的方式。

    【讨论】:

    • 那么您将如何区分平台的 4 个角之间的碰撞,因为您肯定需要针对不同的角产生不同的结果。
    • @user2921888 您检查不同对象的移动方向,这就是它在我链接的代码中所做的。平台没有移动,但它正在检查玩家的方向并将采取行动。
    • 好的,我认为它有效,但在这样做之后,我的跳跃变得很奇怪:if event.type == pygame.KEYDOWN: if collide and event.key == pygame._UP: player.change_y - = 5 if player.change_y == 7: player.change_y = False 使角色向上跳出屏幕
    • @user2921888 尝试查看我发送的代码,它包含运行良好的跳转和碰撞检测,因此我建议您查看它,因为正是该代码帮助我学习了如何做碰撞。如果不尝试自己写一些东西,我真的不记得该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2011-02-06
    • 2015-10-08
    相关资源
    最近更新 更多