I have been trying to figure this out all day and have searched countless posts. I am trying to figure out how to get my sprite to perform an attack animation but there is literally no documentation or information that I could find about how to do this online. I've gotten it to where he will perform the spinning attack animation if I am moving right but after so many spins, the game will crash and say 'list index out of range.' Also, pressing the attack key 'w' does absolutely nothing if the character is standing still. I've included a copy of my code. Any help would be greatly appreciated.
import pygame
import os
os.chdir('C:\\Users\\Name\\Desktop\\Character Animation\\')
pygame.init()
pygame.mixer.init()
WIDTH = 1920
HEIGHT = 1080
FPS = 60
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Game')
''' IMAGE RESIZING___________________________________________________________'''
wRight1 = pygame.image.load('row2_1.png')
wRight1 = pygame.transform.scale(wRight1, (80,80))
wRight2 = pygame.image.load('row2_2.png')
wRight2 = pygame.transform.scale(wRight2, (80,80))
wRight3 = pygame.image.load('row2_3.png')
wRight3 = pygame.transform.scale(wRight3, (80,80))
wRight4 = pygame.image.load('row2_4.png')
wRight4 = pygame.transform.scale(wRight4, (80,80))
wRight5 = pygame.image.load('row2_5.png')
wRight5 = pygame.transform.scale(wRight5, (80,80))
wRight6 = pygame.image.load('row2_6.png')
wRight6 = pygame.transform.scale(wRight6, (80,80))
wRight7 = pygame.image.load('row2_7.png')
wRight7 = pygame.transform.scale(wRight7, (80,80))``
wRight8 = pygame.image.load('row2_8.png')
wRight8 = pygame.transform.scale(wRight8, (80,80))
wLeft1 = pygame.image.load('row10_1.png')
wLeft1 = pygame.transform.scale(wLeft1, (80,80))
wLeft2 = pygame.image.load('row10_2.png')
wLeft2 = pygame.transform.scale(wLeft2, (80,80))
wLeft3 = pygame.image.load('row10_3.png')
wLeft3 = pygame.transform.scale(wLeft3, (80,80))
wLeft4 = pygame.image.load('row10_4.png')
wLeft4 = pygame.transform.scale(wLeft4, (80,80))
wLeft5 = pygame.image.load('row10_5.png')
wLeft5 = pygame.transform.scale(wLeft5, (80,80))
wLeft6 = pygame.image.load('row10_6.png')
wLeft6 = pygame.transform.scale(wLeft6, (80,80))
wLeft7 = pygame.image.load('row10_7.png')
wLeft7 = pygame.transform.scale(wLeft7, (80,80))
wLeft8 = pygame.image.load('row10_8.png')
wLeft8 = pygame.transform.scale(wLeft8, (80,80))
spinAttackR1 = pygame.image.load('spinattackright1.png')
spinAttackR1 = pygame.transform.scale(spinAttackR1, (90,90))
spinAttackR2 = pygame.image.load('spinattackright2.png')
spinAttackR2 = pygame.transform.scale(spinAttackR2, (90,90))
standStill1 = pygame.image.load('standStill1.png')
standStill1 = pygame.transform.scale(standStill1, (80,80))
standStill2 = pygame.image.load('standStill2.png')
standStill2 = pygame.transform.scale(standStill2, (80,80))
standStill3 = pygame.image.load('standStill3.png')
standStill3 = pygame.transform.scale(standStill3, (80,80))
standStill4 = pygame.image.load('standStill4.png')
standStill4 = pygame.transform.scale(standStill4, (80,80))
'''_________________________________________________________________________'''
bg = pygame.image.load('bg.png')
spinAttackList = [spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2,
spinAttackR1, spinAttackR2, spinAttackR1, spinAttackR2]
walkRight = [wRight1, wRight2,
wRight3, wRight4,
wRight5, wRight6,
wRight7, wRight8]
walkLeft = [wLeft1, wLeft2,
wLeft3, wLeft4,
wLeft5, wLeft6,
wLeft7, wLeft8]
#char = [standStill1, standStill2, standStill3, standStill4]
char = pygame.image.load('topDownattackRight3.png')
char = pygame.transform.scale(char, (80,80))
#R = char.get_rect()
clock = pygame.time.Clock()
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
x = 50
y = 770
width = 64
height = 64
vel = 5
isJump = False
jumpCount = 10
spin = False
left = False
right = False
walkCount = 0
attackCount = 0
'''DRAWING SECTION___________________________________________________________'''
def redrawGameWindow():
global walkCount
global attackCount
screen.blit(bg, (0,0))
if walkCount + 1 >= 24:
walkCount = 0
if left:
screen.blit(walkLeft[walkCount//3], (x,y))
walkCount += 1
attackCount += 1
elif right:
screen.blit(walkRight[walkCount//3], (x,y))
walkCount += 1
attackCount += 1
else:
screen.blit(char, (x,y))
if spin:
screen.blit(spinAttackList[attackCount//3], (x,y))
pygame.display.update()
#mainloop
run = True
while run:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
#_________________________________________________________________________
if keys[pygame.K_w]:
spin = True
if keys[pygame.K_LEFT] and x > vel:
x -= vel
left = True
right = False
elif keys[pygame.K_RIGHT] and x < WIDTH - 40:
x += vel
right = True
left = False
else:
right = False
left = False
walkCount = 0
spin = False
if not(isJump):
if keys[pygame.K_SPACE]:
isJump = True
right = False
left = False
walkCount = 0
else:
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
redrawGameWindow()
pygame.quit()