尝试在 Pygame 中为平台游戏实现像素完美碰撞的错误 [重复]

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

我一直在尝试用 Python 为马里奥风格的平台游戏实现像素完美碰撞。

它工作得很好,但是当玩家到达平台的边缘时,它会在边缘出现错误和卡顿。

我很确定这是垂直和水平碰撞之间的冲突,但即便如此我也没有真正想出解决方案

任何关于如何进行的提示/建议将不胜感激。

这是我假设是错误来源的碰撞代码:


def handle_vertical_collision(player,objects,dy):
    collided_objects = []
    if player.gravity > 0:
        for obj in objects:
            if pygame.sprite.collide_mask(player,obj):
                if dy > 0:
                    player.rect.bottom = obj.rect.top
                    player.landed()
                elif dy < 0:
                    player.rect.top = obj.rect.bottom
                    player.hit_head()
            
                collided_objects.append(obj)
    elif player.gravity < 0:
         for obj in objects:
            if pygame.sprite.collide_mask(player,obj):
                if dy < 0:
                    player.rect.top = obj.rect.bottom
                    player.landed()
                elif dy > 0:
                    player.rect.bottom = obj.rect.top
                    player.hit_head()
            
                collided_objects.append(obj)

    return collided_objects

def collide(player,objects,dx):
    player.move(dx,0)
    player.update()
    collided_object = None
    for obj in objects:
        if pygame.sprite.collide_mask(player,obj):
            collided_object = obj
            break
    
    player.move(-dx,0)
    player.update()
    return collided_object
                
def handle_move(player,objects):
    keys = pygame.key.get_pressed()

    player.x_vel = 0
    collide_left = collide(player, objects, -PLAYER_VEL*2)
    collide_right = collide(player,objects, PLAYER_VEL*2)

    if keys[pygame.K_LEFT] and not collide_left:
        player.move_left(PLAYER_VEL)
    if keys[pygame.K_RIGHT] and not collide_right:
        player.move_right(PLAYER_VEL)


    vertical_collide = handle_vertical_collision(player,objects,player.y_vel)

    to_check = [collide_left,collide_right,*vertical_collide]
    for obj in to_check:
        if obj and obj.name == "fire":
            player.make_hit()

Here's the bug in question:

python pygame pixel collision
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.