【问题标题】:Controlling sprite animation with keypress用按键控制精灵动画
【发布时间】:2019-03-14 15:47:02
【问题描述】:

我一直在做一个拳击游戏。在花了几个小时创建一个精灵表之后,我现在在我的游戏中使用它时遇到了麻烦。动画加载正常,但我似乎找不到控制它们的好方法。我想让我的 sprite_sheet 的每一行只循环一次,但是使用这段代码,打孔会一直循环,直到我释放键。

left_jab = False

for event in pygame.event.get():

   if event.type == pygame.QUIT:
       quit()

   elif event.type == pygame.KEYDOWN:

       if event.key == pygame.K_UP:
           left_jab = True

   elif event.type == pygame.KEYUP:

       if event.key == pygame.K_UP:
           left_jab = False

   if left_jab:
        player.update(dt)
        player.render_left_jab(gameDisplay)

这是播放器类的一部分:

    def update(self, dt):

    self.current_time += dt

    if self.current_time >= self.animation_time:
        self.current_time = 0

        if self.current_image >= self.numImages - 1:
            self.current_image = 0

        else:
            self.current_image += 1

有没有更简单的方法来做到这一点? 我的精灵表中每行有 8 张图像。只是使用更多图像创建更流畅的动画吗?

【问题讨论】:

    标签: image animation pygame sprite-sheet


    【解决方案1】:

    想想动画(或出拳)需要多长时间,如果时间到了,再次将left_jab 设置为False

    一个非常简单的方法是将您的代码更改为:

    if self.current_image >= self.numImages - 1:
        self.current_image = 0
        left_jab = False
    

    所以一旦动画循环了一次,我们就停止它。

    当然,这不是最终解决方案,但您会明白的。您没有显示完整代码,但我建议将属于播放器/拳击手实体的所有逻辑移到其类中(检查按键、left_jab 标志等)。

    【讨论】:

    • 谢谢,成功了!我目前在 main.py 中有大部分代码。然后我有一类球员和一类对手。你是在建议我为战斗本身创建一个类吗?
    • 我似乎也有图像循环的问题,有时当我按下一个键时,有时只是在动画中途拾取。它看起来很波涛汹涌。
    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2013-11-10
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多