Hi Alejandro, There are two problems: - You are calling draw on each sprite, not on the batch. - You are creating new images for each sprite
This will result in a lot of state transitions and draw calls. With those two little changes I get a good 100x boost in framerate to over 4000 FPS. The actual performance gains are even bigger. Here is your example adapted: http://paste.pocoo.org/show/382971/ I hope that helps. Cheers, Jonas On May 4, 8:06 pm, Alejandro Castellanos <[email protected]> wrote: > Um. Okay. I hope I'm not doing the batch thing wrong. > > Here goes: > > #_____________________________________________ > > import pyglet > from pyglet import clock, font > from pyglet.gl import * > #___________________________ > > #___________________________ > > #___________________________ > class Basic_Tile(pyglet.sprite.Sprite): # Tile CUADRADO. > def __init__(self, archivo, t_x, t_y, cx, cy, centeredAP): > image = pyglet.image.load(archivo) > if centeredAP == False: > image.anchor_x, image.anchor_y = 0, 0 > elif centeredAP == True: > image.anchor_x, image.anchor_y = image.anchor_x > +image.width/2, image.anchor_y+image.height/2 > #pass it all on to the superclass constructor > pyglet.sprite.Sprite.__init__(self, image, cx, cy, batch = > batch) > self.color = (255,0,0) > self.type = "Basic Tile." > #dado en TILES (coords. en tiles): > self.X = t_x > self.Y = t_y > #dado en pixeles (coords. del centro) > self.x = cx > self.y = cy > #_____________________________________ > class Tile_Engine(): #Para tiles CUADRADOS. > def __init__(self): > self.type = "Tile Engine" > #self.tileside = 10 # Magnitud del LADO del tile. > self.tileside = 15.0 > self.Map_Width = 3 > self.Map_Height = 3 > #___________ > self.Tile_Map = [] #Mapa de los tiles. > self.tst = [] > #_____________________________________ > def Set_Map(self): > l = self.tileside > cols = self.Map_Width > rengs = self.Map_Height > T = self.Tile_Map > #_ > n = 0# para renglones > m = 0# para columnas > #_ > k=l/2#contador de x > j=l/2#contador de y > #_____________________________________ > while n<rengs: > T.append([]) #agrega un elemento de renglon. > while m<cols: > #T[n].append([Basic_Tile("10X10.png", n, m, j, k, > True)])#agrega elemento de una columna. > T[n].append([Basic_Tile("15X15.png", n, m, j, k, > True)])#agrega elemento de una columna. > #T[n].append([Sprite("10X10.png",j, k, True)]) > #T[n].append([n,m]) > j=j+l > m=m+1 > m=0 > j=l/2 > k=k+l > n=n+1 > #_____________________________________ > > batch = pyglet.graphics.Batch()#Defino un batch( en donde guardo > Sprites)... > > #_____________IMPLEMENTACION + PYGLET: > E = Tile_Engine() > E.Map_Width = 15 > E.Map_Height = 11 > E.Set_Map() #Para calcular el mapa. > > window = pyglet.window.Window(100, 100,resizable=True, vsync = False) > glClear(GL_COLOR_BUFFER_BIT) #Borra lo que sea que este en pantalla > (por si acaso) > > #_____Create a font to display FPS > ft = font.load('Arial', 28) > #_____pyglet.font.Text object > fps_text = font.Text(ft, y=10) > > @window.event > def on_draw(): > glClearColor(0.5, 0.5, 1.0, 1.0)#El color del fondo. > glClear(GL_COLOR_BUFFER_BIT) > n = 0 > m=0 > while n<E.Map_Height: > while m<E.Map_Width: > E.Tile_Map[n][m][0].draw() > m=m+1 > m=0 > n=n+1 > #___dibujando el frame rate. > fps_text.text = ("fps: %d") % (clock.get_fps()) > fps_text.draw() > > pyglet.app.run() > > #_____________________________________________ > > #My apologies if the odd spanish mix-up is a problem. -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pyglet-users?hl=en.
