具有多种状态的Pygame动画

时间:2019-03-27 12:40:04

标签: python animation pygame sprite-sheet

我正在尝试找出创建具有多个状态的动画的最佳方法,但是我似乎找不到一种干净的方法来实现我所追求的目标的任何示例。

我有一个人物角色的精灵表,它具有两种跳跃动画状态,在6帧中,角色动画实际上是从地面跳下来的。

在另外6帧中,角色处于“跳跃循环”状态,因此角色已经离开地面,但手臂等轻微移动。

当我将所有图像放入列表中并对其进行迭代时,跳转的初始部分看起来不错,因为角色离开地面然后进入跳转循环。但是一旦完成帧的跳跃循环序列,动画就会回到半空中,所以看起来好像角色只是从某处跳跃。

到目前为止,该函数的代码如下

def animate(self):            
    now = pg.time.get_ticks()

    # Jumping
    if self.jumping:
        if now - self.last_update > 18:
            self.last_update = now
            if self.left:
                self.current_frame = (self.current_frame + 1) % len(self.jump_l)
                bottom = self.rect.midbottom
                self.image = self.jump_l[self.current_frame]
                self.rect = self.image.get_rect()
            elif self.right:
                self.current_frame = (self.current_frame + 1) % len(self.jump_r)
                bottom = self.rect.midbottom
                self.image = self.jump_r[self.current_frame]
                self.rect = self.image.get_rect()
            self.rect.midbottom = bottom

动画有效,但是本质上我想做的是仅如何开始6帧,然后循环播放最后6帧,直到角色着陆。

Current animation

2 个答案:

答案 0 :(得分:1)

我建议拆分动画Spritesheet,这样一排就可以跳出六帧,然后另一排可以容纳另外六帧掉落。

一旦您可以执行此操作,只需检查您的精灵速度变量是正还是负,如下所示:

if self.vel > 0:
    # Switch animation frames to jumping up

elif self.vel < 0:
    # Switch animation frames to falling down

答案 1 :(得分:0)

谢谢大家,我确实将动画分成了两个(不是spritesheet),并且使它可以与速度一起工作(self.vel.x> 0),但是经过一番考虑,那些额外的6帧并没有真正增加太多动画,所以我将其取出,并将跳转的循环部分用作动画。

仔细观察一下,实际上只有3帧,这是角色在完全跳动之前稍微抬起腿的时候,它并不是很引人注目,因此没有真正添加任何东西,所以我放弃了这个想法