I personally have tackled this problem with great success using an additionally Library call rabbty.
I built a numpy array of all my rabbty sprites (I even had it be multi dimensional) then sliced out each layer and passed the layer array to rabbty's render multiple. rabbty and pyglet are compatible (rabbty even supports using pyglet to load sprites) but rabbty is a c extension and is designed to render a lot of sprite extremely fast. my results were the ability to use numpy's fast array operations to both slice out only the visible parts of the map to render putting a hard limit on the number of tiles rendered per frame regardless of map size ((max tiles visible horizontally + 1 to account for scrolling) * (max vertically + 1) * number of layers) and the ability to acheave frame rates above what piglet can get even will well managed vertex lists I know it's not the answer you asked for but this was my eventual solution as I didn't want the tilemap to be a limiting point in my system. as a bonus it's extremely easy to manipulate the tilemap with some ridicules effects because all the tiles are in a numpy array. imagine simulating an earthquake by adding a tiny back and forth tween to every tile in the visible area of the map with just a few lines of code. or instantly replacing every tile with a specific ID (provide you keep a parallax array of the tile ID's to do masking with) with another. the possibilities are endless On Friday, July 19, 2013 5:07:01 PM UTC-6, Fred wrote: > > Hello, > > I'm using pyglet to make an old-fashioned 2D RPG engine. A map is made of > layers (up to 10), each layer is made of tiles (21 * 15 tiles). A map can > be big (more than 100 x 100 tiles), and sometimes infinite (toric). > > The map is rendered in a single batch, each layer is attached to an > OrderedGroup. > A tile from a layer is attached to a sprite (in 'static' mode), but I keep > only tiles that are effectively on screen (in a list). When a tile goes > outside the screen, the sprite is destroyed (it's removed from the list so > I suppose it's destroyed since there are no references on it anymore), and > to the contrary, when a new tile comes inside the screen, I add a new > sprite to the group. I've read they are slow operations, but I don't see a > better way (the maps are too big to keep all the sprites). > > My problem is that I have performances issues for the biggest maps : I > reach at most 5 fps, where I'd like to have 60. Event for smaller ones > (only 3 layers), I get 30 - 40 fps. > > Am I doing it the wrong way (and if so, could you please point me better > ideas) or is my goal clearly unreachable using Python + pyglet, and would > require C++/OpenGL code ? > > Thanks in advance ! > -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/pyglet-users. For more options, visit https://groups.google.com/groups/opt_out.
