It has been suggested by Indiepath to use a dirty rects method, i.e. only draw the bits that have change but to do this you have to store the background behind the thing you are drawing so that it can be replaced the next frame. This means twice as much drawing for every object and if you have a lot of objects all moving at once, it could be slower than my brute force method of DrawBlock the background and then draw everything on it. Unless I'm missing something here?
1) Don't redraw all the background each frame, only draw the parts of the background that have are covered by a dirty rect.
2) Don't redraw the whole of an image, only draw the parts of the image (if any) that are within a Dirty Rect.
Here's my workflow
1) Do all image movements and animations etc.
2) If image is different to last frame then mark the image area as dirty (cycle through all visible images)
3) Merge all DirtyRects (so there is no overlapping)
4) Draw background, but only parts that are within DirtyRects, this is easy - just cycle through the dirtyrects and use DrawImageRect bgImage,0,0,Dirty_rect_x,Dirty_rect_y,Dirty_rect_width,Dirty_rect_height
5) Cycle through all images and draw the parts that are within dirty rects, if at all.
6) Flip
7) Clear All dirtyRects and loop to 1.
* I wish I had a copy of B+ and I could do some code for you.