Ú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... - `Heads-Up Display (HUDs) `__ - 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, .. code:: python 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*: .. code:: python 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).