Yes, it is.

But unless I'm mistaken, most of the time it does nothing (only when tiles 
row/column disappear / appear)

Le vendredi 26 juillet 2013 03:11:42 UTC+2, Richard Jones a écrit :
>
> Just a thought - is the update() method you show below being called every 
> frame? 
>
>
>      Richard 
>
> On 21 July 2013 08:35, Fred <[email protected] <javascript:>> wrote: 
> > Thanks for your answer. I studied the code. 
> > 
> > On Saturday, July 20, 2013 9:49:30 AM UTC+2, Juan J. Martínez wrote: 
> >> 
> >> On 20/07/13 00:07, Fred wrote: 
> >> > [...] 
> >> > 
> >> > 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 ? 
> >> 
> >> You can do it with Python and Pyglet, you just need to use OpenGL: 
> >> 
> >> http://los-cocos.googlecode.com/svn/trunk/cocos/tiles.py 
> >> 
> >> See MapLayer._update_sprite_set and base class 
> >> layer.ScrollableLayer.draw. Basically if keeps en memory a list of 
> >> visible sprites and uses OpenGL's glTranslate for scrolling. 
> >> 
> > 
> > From what I've understood, I use the same scheme. For example, my 
> equivalent 
> > of MapLayer._update_sprite is : 
> > 
> >     def update(self): 
> >         t_left, t_right = GfxBase.screen_left / 32 - 1, 
> (GfxBase.screen_left 
> > + GfxBase.screen_width) / 32 + 1 
> >         t_top, t_bottom = -(GfxBase.screen_bottom + 
> > GfxBase.screen_height)/32 - 1, -GfxBase.screen_bottom/32 + 1 
> > 
> >         for j in xrange(self.th): 
> >             for i in xrange(self.tw): 
> >                 if t_left <= i < t_right and t_top <= j < t_bottom: 
> > #                    print (i, j), ':', self.sprite_array[j][i] 
> >                     if not self.sprite_array[j][i] and 
> self.array[j][i][0] > 
> > 0: 
> >                         _sprites_added += 1 
> >                         image_id, transfo = self.array[j][i] 
> >                         image = self.sheet[image_id] 
> >                         image.anchor_x = image.anchor_y = 16 
> >                         if transfo & 0x40: 
> >                             image = image.get_transform(flip_y = True) 
> >                         elif transfo & 0x80: 
> >                             image = image.get_transform(flip_x = True) 
> >                         sprite = pyglet.sprite.Sprite(image, 
> >                                                       x = i * 32 + 16, 
> >                                                       y = -j * 32 - 16, 
> >                                                       blend_src = 
> > self.blend_src, 
> >                                                       blend_dest = 
> > self.blend_dest, 
> >                                                       batch = 
> self.batch, 
> >                                                       group = 
> self.group, 
> >                                                       usage = 'static') 
> >                         sprite.opacity = self.alpha 
> >                         self.sprite_array[j][i] = sprite 
> > #                        print 'sprite drawn at 
> > ',(self.sprite_array[j][i].x, self.sprite_array[j][i].y), '#', 
> > self.array[j][i], 'batch=', self.batch 
> >                 elif self.sprite_array[j][i]: 
> >                     _sprites_removed += 1 
> >                     self.sprite_array[j][i] = None 
> > 
> > I can explain the code more if needed but the difference with cocos' 
> code is 
> > that I use a 2D array to store the sprites, where cocos uses a dict 
> whose 
> > keys are tuples ? 
> > Also, I use an OrderedGroup for each layer (in order to draw them in the 
> > right order), whereas I didn't find how cocos achieves that (a Batch per 
> > layer ?). I was wondering if it wouldn't be more efficient to set a 
> z-value 
> > to every sprites in a layer (rather than a group), but pyglet sprites 
> don't 
> > have a z attribute (I suppose it wouldn't be too hard to implement 
> though, 
> > but I don't know if it has an impact on performances). I suspect this 
> group 
> > drawing procedure to be one of the bottleneck of my program. 
> > 
> > As to the draw method, mine is simply : 
> > 
> >             pyglet.gl.glLoadIdentity() 
> >             self.window.clear() 
> >             pyglet.gl.glTranslatef(-GfxBase.screen_left, 
> > -GfxBase.screen_bottom, 0) 
> >             self.batch.draw() 
> > 
> > 
> >> 
> >> Cocos2D code is a great example. I know it can be hard to read if 
> you're 
> >> not used to OOP (too many layers!), but I think it will help you with 
> >> your problem. 
> >> 
> > In fact, I knew about Cocos2D, and studied its TMX loader before. I 
> agree 
> > that's a great library. Ressources on the net about it should be more 
> > numerous. 
> >> 
> >> Regards, 
> >> 
> >> Juan 
> >> 
> >> -- 
> >> jjm's home: http://www.usebox.net/jjm/ 
> >> blackshell: http://blackshell.usebox.net/ 
> > 
> > -- 
> > 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] <javascript:>. 
> > To post to this group, send email to 
> > [email protected]<javascript:>. 
>
> > Visit this group at http://groups.google.com/group/pyglet-users. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
> > 
> > 
>

-- 
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.


Reply via email to