如何修复 Pygame 中运动动画的 TypeError?

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

这是我第一次编写游戏代码,所以这个问题的答案可能很简单,但我已经为此苦苦挣扎了很多年。我正在尝试为游戏进行移动,但我不断收到此错误:

类型错误:Animation.update_animation() 需要 1 个位置参数,但给出了 6 个

这是我尝试过的

这是动画类的代码片段:

def update_animation(self, x_movement, y_movement, right, left, up, down):
        # Updates the animation frame if the cooldown time has passed
        current_time = pygame.time.get_ticks()
        if current_time - self.last_update >= self.animation_cooldown:
            self.current_frame = (self.current_frame + 1) % self.animation_frames
            self.last_update = current_time


        # What frames are outputted depending on player movement
        if x_movement: #animations for moving along the x-axis
            if left:
                self.current_animation_frames = self.move_left
            elif right:
                self.current_animation_frames = self.move_right
        elif y_movement: #moving along the y axis
            if up:
                self.current_animation_frames = self.move_up
            elif down:
                self.current_animation_frames = self.move_down
        else:
             self.current_animation_frames = self.idle

这是

Character
类中的代码,我在其中调用方法
update_animation
:

# changes animation frame
self.player_animation.update_animation(x_movement, y_movement, left, right, up, down)
# draws the player sprite with the current animation frame
screen.blit(self.player_animation.get_current_frame(), (self.rect.x, self.rect.y))

我很困惑,因为我不知道我错过了什么,任何帮助将不胜感激。谢谢!

python class oop typeerror instance
1个回答
0
投票

您能否向我们展示初始化调用类方法的对象的代码以及调用类方法的行?如果没有看到这一点,很难进一步说出了什么问题。

如果异常告诉您给出了太多位置参数,它可能期望传递的变量位于某种包装器或可迭代类型内。通常,这可以通过在包含所有方法的位置参数的元组/列表/可迭代前面使用 * 调用类方法来解决。

即。

player = Player(0, 0, spriteImg, **kwargs)
player.player_animation.update_animation(*(False, True, False, False, True, False))
screen.blit(player.player_animation.get_current_frame(), (player.rect.x, player.rect.y))

您还应该注意,除非您动态地将 kb/鼠标输入传递到类实例,否则在类内调用animation_update() 方法不会进行任何更改。但是,您可以使用从 pygame.sprite.Sprite 继承的更新钩子(如果从 Sprite 继承)来获取必要的动画参数并将它们传递给player_animation.update_animation() 的调用,然后使用结果对象运行 screen.blit。例如

def update(**kwargs):
    aniupdate = self.player_animation.update_animation(**kwargs)
    screen.blit(aniupdate, (self.coords))
© www.soinside.com 2019 - 2024. All rights reserved.