I took a look at your code and found the solution in changing line 392 inside the __init__
method of your Map
object from
self.currentmap = pygame.image.load(os.path.join("assets", "maps", "spawn.png"))
to
self.currentmap = pygame.image.load(os.path.join("assets", "maps", "spawn.png")).convert()
If you have images that don’t need an alpha channel you should always call convert
on them.
At the beginning I had a framerate of 18 fps now it’s the desired 60 fps.
The key tool to find this bottleneck was the python module cProfile
. Next time you should learn about it before posting a wall of nearly 500 lines of code .
Also consider changing the loading of your image files to the initialization of your objects into a list. Currently you are loading all the images for your characters each time you render them.