In pygame I wish to have a scrolling background so that the player can move around a large area, I have done this rather easily, but the game runs very slowly.
some of my code: http://pastebin.com/1EzDV7mc
what am I doing inefficiently? how can I make it run faster?
In particular:
Use surface.convert()
Ideally use dirty rect animation, only updating the parts of the screen that have changed, not the entire view. That said I have previously used whole screen updates with PyGame (which is what you need to do for a game where the whole screen is constantly scrolling), and it's not that bad on a modern computer as long as you don't have too many objects.
Not mentioned in that guide:
you are aiming for 60fps with clock.tick(60), aim lower, 30fps is fine and won't hose the CPU as much
If you need to do full screen updates for scrolling, then either a) don't use many objects or b) stop using PyGame and switch to OpenGL
why are you blitting images using their mid points, rather than their top left point? A mistake?
It is more usual to store size attributes as seperate width and height attribute, not as a list you have to index. This makes your code much clearer.