It's quite simple really. In tiled you define some layer that need to be cached, because you know they will always be behind dynamic elements no matter what. I labelled them level0x. For example level0, level0b, level0c.
In your game, you detect the layer index level when static elements ends.
- You do a loop from 0 to end of static layers and draw it in a spritecache. (only once)
- You then loop from the beginning of your dynamic tiles and draw them using a regular spritebatch.
Here only the dynamic stuff drawn:
Here + the spritecache
And lastly, the camera translated and zoomed: no problem with the sprite cache being static at all: