Я хотел бы создать сверху вниз RPG в pygame, используя спрайт-листы.pygame animation sprite sheet
Я хочу, чтобы иметь возможность нажать пробел, например, для атаки, которая вызовет атакующую анимацию, а затем вернуться к нормальной
import pygame
from pygame.locals import *
pygame.init()
image = pygame.image.load("sprite_sheet.png")
clock = pygame.time.Clock()
screen = pygame.display.set_mode((400, 250))
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.current_animation = 0
self.max_animation = 5
self.animation_cooldown = 150
self.last_animation = pygame.time.get_ticks()
self.status = {"prev": "standing",
"now": "standing"}
def animate_attack(self):
time_now = pygame.time.get_ticks()
if time_now - self.last_animation >= self.animation_cooldown:
self.last_animation = pygame.time.get_ticks()
if self.current_animation == self.max_animation:
self.current_animation = 0
joshua.status["now"] = joshua.status["prev"]
else:
self.current_animation += 1
joshua = Player()
while True:
screen.fill(0)
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
joshua.status["prev"] = joshua.status["now"]
joshua.status["now"] = "attacking"
if joshua.status["now"] == "attacking":
joshua.animate_attack()
screen.blit(image, (0, 0), (joshua.current_animation * 64, 0, 64, 64))
pygame.display.flip()
clock.tick(60)
выше кусок кода является то, что я есть. Если я нажимаю пробел, как только он пройдет анимацию и остановится, но если я дважды коснусь его, он будет зацикливать его из-за того, как он запрограммирован.
Хотела некоторую помощь в анимации, спасибо
большое спасибо. Скажем, у меня были элементы управления для WASD, и я попытался перемещаться, установив статус влево для перемещения влево. если я нахожусь в центре атаки и нажимаю W, он перезаписывает атаку и останавливает анимацию. Есть ли способ сделать завершение анимации до запуска другого события? –
Вы можете использовать отдельные переменные состояния: , например 'self.movement' (« стоя »,« левый », ...) и' self.attacking' (True, False). Таким образом, вы можете обновить состояние перемещения независимо от состояния атаки. Для анимации, если 'self.attacking' является True , тогда вычислите текущий атакующий кадр, иначе используйте соответствующий кадр для текущего движения . – Meyer