Problem drawing batch labels

Started by
-1 comments, last by darkfeline 11 years, 7 months ago
I'm having trouble with drawing labels with Pyglet. In order to do loose coupling between the game model and view, I have a system set up where game objects create their own sprite which are later added through an event system to a single batch (the View in MVC). Here's how that happens:
[source lang="python"] class View:

_map = ('player', 'player_bullet', 'player_hb', 'enemy', 'item',
'enemy_bullet', 'ui', 'ui_element')

def __init__(self):
self.batch = pyglet.graphics.Batch()
self.groups = dict(zip(self.__class__._map,
[OrderedGroup(i) for i in range(len(self.__class__._map))]))

def on_draw(self):
globals.WINDOW.clear()
self.batch.draw()

def on_add_sprite(self, sprite, group):
if isinstance(sprite, Label):
self.add_label(sprite, group)
else:
self.add_sprite(sprite, group)

def add_label(self, label, group):
set_label_group(label, self.groups[group])
label.batch = self.batch
label._own_batch = False

def add_sprite(self, sprite, group):
try:
sprite.group = self.groups[group]
except AttributeError: # sprite already deleted
return
sprite.batch = self.batch


def set_label_group(label, group):
label.top_group = TextLayoutGroup(group)
label.background_group = OrderedGroup(0, label.top_group)
label.foreground_group = TextLayoutForegroundGroup(1, label.top_group)
label.foreground_decoration_group = \
TextLayoutForegroundDecorationGroup(2, label.top_group)
[/source]

Sprites are added and draw fine in this system, but Labels, not so much. I confirmed that they're being added (add_label is being called), their coordinates and draw order is right (hopefully eliminating stupid mistakes), yet they're simply not drawing.

There actually is one Label which is drawing, an FPS Label whose text is updated every second. This appears only after the first second the game starts running (possibly because its text was updated). However, updating the text on the other others Labels doesn't make them draw.

Any ideas? This bug is driving me crazy.

This topic is closed to new replies.

Advertisement