Members - Reputation: 102
Posted 03 September 2012 - 04:08 PM
[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.