Спрайт анимация по щелчку мыши - PullRequest
0 голосов

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

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

        if self.standing:
            if now - self.last_update > 50:
                self.last_update = now
                self.current_frame = (self.current_frame + 1) % len(self.game.player_idles)
                self.image = pg.transform.scale(self.game.player_idles[self.current_frame], (64, 55))
                self.image_copy = pg.transform.rotate(self.image, 270)

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Использовать очередь событий.

В update, заменить:

    if mouse[0]:
        self.shooting = True
        self.standing = False
        self.moving = False
    else:
        self.shooting = False

с:

    for event in pygame.event.get():
        if e.type == MOUSEBUTTONDOWN:
            shoot()

Затем вы можете полностью избавиться от shooting bool и добавить графические изменения, сделанные if self.shooting в вашу функцию shoot. Или, если вы хотите сохранить shooting bool, вы можете сделать что-то вроде этого:

    for event in pygame.event.get():
        if e.type == MOUSEBUTTONDOWN:
            self.shooting = True
            self.moving = False
            self.standing = False
        if e.type == MOUSEBUTTONUP:
            self.shooting = False

Этот код будет более отзывчивым, поскольку он работает всякий раз, когда пользователь вводит событие (щелчок), а не нажатие кнопки мыши.

0 голосов
/ 21 мая 2019

Я не уверен, как вы вызываете анимацию для съемочной части.

Можете ли вы опубликовать свой код для этого? Я мог бы сказать больше тогда. В противном случае мой код может не быть значимым / полезным. Я прошу прощения за это. (Пока не могу комментировать)

Проверка состояния щелчка мыши в событиях Pygame. Если вы найдете щелчок, сохраните его под флажком (флажками), как для стоячей части.

Мы будем использовать переменную с названием click_animation_state, чтобы увидеть, в каком кадре мы находимся в данный момент.

self.game.shooting_frames = [img1, img2, img3]

if self.mouse_clicked:
    if now - self.last_update > time_threshold:
        self.last_update = now
        self.current_frame = (self.current_frame + 1) % 
        len(self.game.shooting_frames)
        self.image = pg.transform.scale(self.game.click_frames[self.current_frame], (64, 55))
        self.image_copy = pg.transform.rotate(self.image, 270)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...