Ús de capes en videojocs¶
Usant capes (layers) podem organitzar millor els diferents elements del joc i visualitzar-los més còmodament; o fins i tot, aconseguir efecte visual de profunditat.
El terme «capa» ve del cine, on es fan servir diferents capes físiques de la película, per exemple pels crèdits o subtítols superimposats a la filmació; es filmen/filmaven dues capes diferents que finalment es munta en la película final.
Cada capa té una profunditat, un valor enter, de manera que una capa amb profunditat petita es visualitza per sobre d’una altra amb profunditat més gran. L’algorisme del pintor consisteix en començar pintant els elements de la capa més profunda i acabar amb la de profunditat més petita.
Les capes permeten reorganitzar els element ràpidament, alterant la profunditat d’una capa o bé canviant de capa un element.
Organització típica dels elements/grafismes d’un videojoc (2D) en capes:
Fons (background layer), que pot ser fix o variable. El fet de moure el fons del joc s’anomena scrolling. Si el distribuïm en diferents subcapes, podem aconseguir efectes de tridimensionalitat (vegeu parallax scrolling).
Capa priricipal (interactive layer): conté els personatges i altres elements interactius del joc: objectes, trets… . A la seva vegada, es poden distribuir en diferents subcapes (p. ex. si volem que un personatge passi per darrere un arbre)
Capa superior (foreground layer). Pot contenir:
Efectes visuals: explosions, fum…
Menús
En pygame¶
Es pot aplicar l’algorisme del pintor, ja sigui directament o bé amb l’ajut dels grups de sprites ordenats (OrderedUpdates).
També existeixen els LayeredUpdates, un grups de sprites que admeten organització per capes. Per defecte no existeix ordenació o bé els sprites es pinten en l’ordre en què s’han afegit al grup.
Implementació: en crear se li passa la capa,
grup = pygame.sprite.LayeredUpdates()
grup.add(sprite1, layer=1)
grup.add(sprite2, layer=0)
grup.add(sprite3, layer=5)
o bé els sprites tenen l’atribut layer:
grup = pygame.sprite.LayeredUpdates()
grup.add(sprite1)
grup.add(sprite2)
grup.add(sprite3)
sprite1.layer = 1
sprite2.layer = 0
sprite3.layer = 5
Els grups LayeredUpdates permeten tant consultar (quantes capes hi ha al grup, quins sprites hi ha a cada capa,…) com modificar les capes (passar una capa davant de tot, canviar un sprite de capa, etc).