My character is switching through frames extremely fast and I dont know why. Ive tried changing the self.animation_speed but it doesnt do anything besides stalling when the game starts. can someone give me a fix? get_frect is a floating point of get_rect its really useful. It comes from the pygame module addon called 'pygame-ce' import pygame from random import randint from os.path import isfile, join pygame.init() class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.idle_spritesheet = pygame.image.load(join('images', 'Unarmed_Idle', 'Unarmed_Idle_full.png')).convert_alpha() self.walk_spritesheet = pygame.image.load(join('images', 'Unarmed_Walk', 'Unarmed_Walk_full.png')).convert_alpha() self.run_spritesheet = pygame.image.load(join('images', 'Unarmed_Run', 'Unarmed_Run_Full.png')).convert_alpha() self.frame_width = 64 self.frame_height = 64 scale = (120,120) # Idle Frames List idle_frame_count = { 'idledown': 12, 'idleleft': 12, 'idleright': 12, 'idleup': 3 } # Walk Frames List walk_frame_count = { 'walkdown': 6, 'walkleft': 6, 'walkright': 6, 'walkup': 6 } # Run Frames List run_frame_count = { 'rundown': 8, 'runleft': 8, 'runright': 8, 'runup': 8 } # List of Animations with properties self.animation_list = { 'idle': {'down': [],'left': [], 'right': [], 'up': []}, 'walk': {'down': [],'left': [], 'right': [], 'up': []}, 'run': {'down': [], 'left': [], 'right': [], 'up': []} } x_offset = 0 # Idle for i in range(idle_frame_count['idledown']): frames = self.idle_spritesheet.subsurface((x_offset, 0, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['idle']['down'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(idle_frame_count['idleleft']): frames = self.idle_spritesheet.subsurface((x_offset, 64, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['idle']['left'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(idle_frame_count['idleright']): frames = self.idle_spritesheet.subsurface((x_offset, 128, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['idle']['right'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(idle_frame_count['idleup']): frames = self.idle_spritesheet.subsurface((x_offset, 192, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['idle']['up'].append(frames) x_offset += self.frame_width # Walk x_offset = 0 for i in range(walk_frame_count['walkdown']): frames = self.walk_spritesheet.subsurface((x_offset, 0, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['walk']['down'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(walk_frame_count['walkleft']): frames = self.walk_spritesheet.subsurface((x_offset, 64, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['walk']['left'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(walk_frame_count['walkright']): frames = self.walk_spritesheet.subsurface((x_offset, 128, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['walk']['right'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(walk_frame_count['walkup']): frames = self.walk_spritesheet.subsurface((x_offset, 192, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['walk']['up'].append(frames) x_offset += self.frame_width # Run x_offset = 0 for i in range(run_frame_count['rundown']): frames = self.run_spritesheet.subsurface((x_offset, 0, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['run']['down'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(run_frame_count['runleft']): frames = self.run_spritesheet.subsurface((x_offset, 64, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['run']['left'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(run_frame_count['runright']): frames = self.run_spritesheet.subsurface((x_offset, 128, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['run']['right'].append(frames) x_offset += self.frame_width x_offset = 0 for i in range(run_frame_count['runup']): frames = self.run_spritesheet.subsurface((x_offset, 192, self.frame_width, self.frame_height)) frames = pygame.transform.scale(frames, scale) self.animation_list['run']['up'].append(frames) x_offset += self.frame_width x_offset = 0 self.action = 'idle' self.direction = 'right' self.current_frame = 0 self.image = self.animation_list[self.action][self.direction][self.current_frame] self.rect = self.image.get_frect(center=(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2)) self.animation_speed = 0.3 self.last_update = pygame.time.get_ticks() self.speed = 0.3 def update(self): now = pygame.time.get_ticks() keys = pygame.key.get_pressed() moving = False if keys[pygame.K_RIGHT]: self.action = 'walk'; self.direction = 'right'; moving = True self.rect.x += self.speed elif keys[pygame.K_LEFT]: self.action = 'walk'; self.direction = 'left'; moving = True self.rect.x -= self.speed elif keys[pygame.K_UP]: self.action = 'walk'; self.direction = 'up'; moving = True self.rect.y -= self.speed elif keys[pygame.K_DOWN]: self.action = 'walk'; self.direction = 'down'; moving = True self.rect.y += self.speed else: self.action = 'idle' if now - self.last_update > self.animation_speed * 1000: now = self.last_update frames = self.animation_list[self.action][self.direction] self.current_frame = (self.current_frame + 1) % len(frames) self.image = frames[self.current_frame] WINDOW_WIDTH, WINDOW_HEIGHT = 900, 600 screen = pygame.display.set_mode((WINDOW_HEIGHT, WINDOW_HEIGHT)) pygame.display.set_caption('Male Top-Down SpriteSheet Test') run = True clock = pygame.time.Clock() player = Player() all_sprites = pygame.sprite.Group(player) while run: dt = clock.tick() / 1000 screen.fill('black') for event in pygame.event.get(): if event.type == pygame.QUIT: run = False all_sprites.update() all_sprites.draw(screen) pygame.display.update() pygame.quit() exit() I tried changing self.animation_speed but it stalls until it starts. I have tried changing the framerate but it makes the character teleport when moving etc etc. Continue reading...