Pygame анимация с несколькими состояниями - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь найти лучший способ создания анимации с несколькими состояниями, но я не могу найти какие-либо примеры чистого способа достижения того, чего я добиваюсь.

У меня есть спрайт-лист для персонажа, у которого есть два состояния анимации прыжка, есть 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 ]

1 голос
/ 27 марта 2019

Я бы рекомендовал разделить таблицу спрайтов анимации, чтобы у вас была одна строка с шестью кадрами для прыжка вверх, а затем еще одна строка для остальных шести падающих кадров.

Как только вы сможете это сделать, просто проверьте, является ли переменная скорости ваших спрайтов положительной или отрицательной, например:

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

elif self.vel < 0:
    # Switch animation frames to falling down
0 голосов
/ 28 марта 2019

Спасибо, ребята, я разделил анимацию на две части (не на спрайт-лист) и заставил ее работать со скоростью (self.vel.x> 0), но после некоторого рассмотрения эти дополнительные 6 кадров на самом деле не добавили многок анимации, поэтому я просто вынул ее и использовал петлевую часть прыжка в качестве анимации.

Если присмотреться, то на самом деле есть только 3 кадра, в которых персонаж слегка поднимает ногу, прежде чем находится вполный прыжок, и он не очень заметен, и, следовательно, ничего не добавил к нему, поэтому я отказался от идеи.

...