The issue is in the update function where it basically prints all the frames of the spritesheet walking right at once instead of a single frame. I wanted to set a singular image to print due to which direction it's facing.
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.movex = 0
self.movey = 0
self.frames = [0]*4
player_movement_spritesheets = Spritesheet(os.path.join('assets/player', 'movement.png'))
self.sprites = []
for i in range(4):
for j in range(4):
self.sprites.append((0, i*50, 32*(j+1), 50))
#print(self.sprites)
self.images = player_movement_spritesheets.images_at(self.sprites, black)
self.ani = 4
self.image = self.images[0]
self.rect = self.image.get_rect()
def control(self,x,y):
self.movex += x
self.movey += y
def update(self,boundary):
new_rect = self.rect.copy()
new_rect.x += self.movex
new_rect.y += self.movey
line_a = Polygon(boundary)
line_b = Polygon([
(new_rect.x, new_rect.y),
(new_rect.x+(player_sprite_width),new_rect.y),
(new_rect.x+(player_sprite_width),new_rect.y+(player_sprite_height)),
(new_rect.x, new_rect.y+(player_sprite_height))])
#print(line_a)
#print(line_b)
About here
if line_a.intersects(line_b):
self.rect = new_rect.copy()
#Loop a direction frames and set other's to 0
#Up left right down
if self.movex>0:
for i in range(len(self.frames)):
if i==2:
if self.frames[2]>self.ani:
self.frames[2]=0
else:
self.frames[2]+=1
else:
self.frames[i]=0
if self.movey>0:
self.image = self.images[8+self.frames[2]]
self.image = pygame.transform.rotate(self.image, -23)
elif self.movey<0:
self.image = self.images[8+self.frames[2]]
self.image = pygame.transform.rotate(self.image, 23)
else:
self.image = self.images[8+self.frames[2]]
self.player.rect.x = 475
self.player.rect.y = 350
self.player_list = pygame.sprite.Group()
self.player_list.add(self.player)
def draw(self,screen):
if self.level < len(self.boundaries):
self.player_list.draw(screen)