Управление спрайтовой анимацией с помощью нажатия клавиш - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над боксерской игрой.Потратив часы на создание листа спрайта, у меня возникли проблемы с его использованием в моей игре.Анимации загружаются нормально, но я не могу найти хороший способ их контролировать.Я хотел бы, чтобы каждая строка моего цикла 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 изображений в каждой строке.Это просто вопрос создания более плавной анимации с использованием большего количества изображений?

1 Ответ

0 голосов
/ 10 октября 2018

Подумайте о том, сколько времени должна занять анимация (или перфорация), и если это время истекло, снова установите left_jab на False.

Очень простой способ - изменить код начто-то вроде:

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

Так что, как только анимация зациклилась один раз, мы просто остановим ее.

Конечно, это не окончательное решение, но вы поймете идею.Вы не показали свой полный код, но я предлагаю перенести всю логику, которая принадлежит сущности игрока / боксера, в ее класс (проверка нажатия клавиш, флаг left_jab и т. Д.).

...