Ходьба не заканчивается в пигме - PullRequest
1 голос
/ 28 февраля 2020

Я сделал анимацию ходьбы в Pygame. У меня он начинается лицом вперед, а затем, если вы двигаетесь, анимация переключается влево или вправо, в зависимости от того, как вы двигаетесь. Но когда я переключаюсь назад, чтобы не двигаться, анимация не меняется обратно.

    def animate(self):
        now = pg.time.get_ticks()
        if self.vel.x != 0:
            self.walking = True
        else:
            self.walking = False
        # Show walk animation
        if self.walking:
            if now - self.last_update > 200:
                self.last_update = now
                self.current_frame = (self.current_frame + 1) % len(self.walk_frames_l)
                bottom = self.rect.bottom
                if self.vel.x > 0:
                    self.image = self.walk_frames_r[self.current_frame]
                else:
                    self.image = self.walk_frames_l[self.current_frame]
                self.rect = self.image.get_rect()
                self.rect.bottom = bottom

        # Show idle animation
        if not self.jumping and not self.walking:
            if now - self.last_update > 350:
                self.last_update = now
                self.current_frame = (self.current_frame + 1) % len(self.standing_frames)
                bottom = self.rect.bottom
                self.image = self.standing_frames[self.current_frame]
                self.rect = self.image.get_rect()
                self.rect.bottom = bottom

Я выяснил причину, по которой это не останавливается, связано с логикой движения c в другой части моя программа и self.vel.x никогда не будут равны 0, просто очень близко к ней. Я исправил это, выполнив

if (self.vel.x // 1) != 0:

Это делает так, что если значение vel равно 0.001, то оно будет просто 0. Это работает, если я двигаюсь вправо, но если я двигаюсь влево, он не переключается назад , Кто-нибудь знает почему? Спасибо.

1 Ответ

2 голосов
/ 28 февраля 2020

Если вы идете налево, ваша скорость будет отрицательной. Этажное деление (//) всегда округляется вниз. Это означает, что если ваша скорость равна -0,001, она округляется до -1, что не равно 0. Вы можете подтвердить это, выполнив print(self.vel.x // 1) перед вашим if.

. Решение состоит в том, чтобы сравнить абсолютное значение скорости. Вы можете получить абсолютное значение, выполнив abs(self.vel.x).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...