2015-04-16 2 views
0

Je teste pyglet lib. La première chose que je l'ai fait est de dessiner une image d'arrière-plan et un simple écrit, voici le code:Pyglet: dessiner un lot

game_window = pyglet.window.Window(720, 1280, fullscreen=True) 
game_window.set_exclusive_mouse() 

background_day = pyglet.sprite.Sprite(img=resources.background_day_image, x=0, y=0) 
fps_label = pyglet.text.Label(text="fps: 0", x=100, y=100) 

@game_window.event 
def on_draw(): 
    game_window.clear() 
    background_day.draw() 
    fps_label.draw() 

if __name__ == '__main__': 
    pyglet.app.run() 

Cela fonctionne parfaitement sans aucun problème. Ensuite, je décide de mettre en œuvre lots tirer si je change mon code:

main_batch = pyglet.graphics.Batch() 
background_day = pyglet.sprite.Sprite(img=resources.background_day_image, x=0, y=0 ,batch=main_batch) 
fps_label = pyglet.text.Label(text="fps: 0", x=100, y=100,batch=main_batch) 

@game_window.event 
def on_draw(): 
    game_window.clear() 
    main_batch.draw() 

Il arrive que je vois le fond, mais je ne vois pas l'écrit et je ne comprends pas pourquoi ou si je me trompe.

Merci

MISE À JOUR

A partir du manuel: Lorsque sprites sont recueillies dans un lot, aucune garantie ne peut l'ordre dans lequel ils seront tirés au sort. Si vous devez vous assurer que certaines images-objets sont dessinées avant les autres, utilisez deux objets ou plusieurs objets OrderedGroup pour spécifier l'ordre de dessin. Tout bon programmeur devrait lire le manuel en premier!

+0

Si vous avez trouvé la réponse, il serait plus utile de poster comme réponse que comme une mise à jour au bas de la question. En ce moment, il semble que la question a 0 réponses, ce qui pourrait dissuader les gens avec le même problème de regarder –

+0

vous avez raison! c'est plus utile – NiBE

Répondre

1

A partir du manuel: Lorsque des sprites sont collectés dans un lot, aucune garantie n'est donnée quant à l'ordre dans lequel ils seront tirés. Si vous devez vous assurer que certaines images-objets sont dessinées avant les autres, utilisez deux objets OrderedGroup ou plus pour spécifier l'ordre de dessin.

Donc, fondamentalement, disons que vous avez fond et de premier plan sprites, vous créez d'abord un tirage au sort par lot, puis deux groupes l'un pour l'arrière-plan et un pour l'avant-plan:

main_batch = pyglet.graphics.Batch() 
background = pyglet.graphics.OrderedGroup(0) 
foreground = pyglet.graphics.OrderedGroup(1) 

Ensuite, vous ajoutez l'image-objet spécifiant à la fois la le nom du lot et le nom du groupe:

background = pyglet.sprite.Sprite(img=resources.background_day_image, x=0, y=0, batch=main_batch,group=background) 
sprite1 = pyglet.sprite.Sprite(img=resources.background_day_image, x=0, y=0, batch=main_batch,group=foreground) 

Tout bon programmeur devrait d'abord lire le manuel!