Just a thought - is the update() method you show below being called every frame?
Richard
On 21 July 2013 08:35, Fred <[email protected]> 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].
> 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.
>
>
--
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.