试图在 pygame 中创建一个 "solid" 块

Trying to make a "solid" block in pygame

所以我希望我的玩家无法穿过方块,但它会传送到另一边,知道为什么吗?这是我的代码:

def update(self, collidable):
    self.rect.x += self.hspeed

    collision_list = pygame.sprite.spritecollide(self, collidable, False)
    for collided_object in collision_list:
        if (self.hspeed > 0):
            # right direction
            self.rect.right = collided_object.rect.left

        elif (self.hspeed < 0):
            # left direction
            self.rect.left = collided_object.rect.right

    self.rect.y += self.vspeed

    collision_list = pygame.sprite.spritecollide(self, collidable, False)   
    for collided_object in collision_list:
        if (self.vspeed > 0):
         # down direction
            self.rect.bottom = collided_object.rect.up

        elif (self.vspeed < 0):
            # up direction
            self.rect.top = collided_object.rect.bottom

提前致谢!

对最后的回答感到抱歉。这是应该修复您的代码的一个。 新代码是:

def update(self, collidable):
    self.rect.x += self.hspeed

    collision_list = pygame.sprite.spritecollide(self, collidable, False)
    for collided_object in collision_list:
        if (self.hspeed > 0):
            # right direction
            self.rect.left = collided_object.rect.right # rect.right and rect.left swapped

        elif (self.hspeed < 0):
            # left direction
            self.rect.right = collided_object.rect.left # rect.right and rect.left swapped

    self.rect.y += self.vspeed

    collision_list = pygame.sprite.spritecollide(self, collidable, False)   
    for collided_object in collision_list:
        if (self.vspeed > 0):
         # down direction
            self.rect.bottom = collided_object.rect.up

        elif (self.vspeed < 0):
            # up direction
            self.rect.top = collided_object.rect.bottom

我更改的行在 self.hspeed 碰撞中。当你击中一侧时,你不是坚持到那一侧,而是锁定到立方体的另一侧。简而言之,我交换了 rect.left 和 rect.right,但您可以交换 > 0 和 < 0,但我想将其保持在正确的位置,这样看起来更好...