*Scrolling* vertical -------------------- .. py:module:: fons Estem fent un joc tipus marcianets i volem tenir-hi una imatge d'un cel estrellat, purament decoratiu, que es va movent verticalment cap avall per a simular el moviment continu de la nostra nau, és a dir, fent ús de la tècnica anomenada `scrolling vertical `_. A tal fi, utilitzarem un `sprite de Pygame `_ **el doble de gran que la pantalla** i que contindrà una imatge del fons duplicada, tal com mostra la figura següent: .. image:: scrolling.svg :height: 500 pt :align: center #. Al fitxer :file:`fons.py`, escriviu la classe :py:class:`Fons`, derivant-la dels sprites de Pygame: .. py:class:: Fons(imatge) Sprite de Pygame que permet dibuixar un fons que es desplaça verticalment cap avall, de forma cíclica. **Atributs**: Els indispensables de tota classe quan es fa herència dels sprites de Pygame. No en necessita cap d'addicional. **Mètodes**: .. py:method:: __init__(im) Donada la imatge `im` (una *Surface* de Pygame), que ja té les mides de la pantalla, crea l'sprite amb una imatge (atribut `image`) que ha de ser de la mateixa amplada que `im` i d'alçada doble que `im`. La imatge de l'sprite ha de contenir dues còpies de `im`, una sobre l'altra per tal de poder fer l'*scrolling* vertical. Inicialment, la posició (atribut `rect`) ha de ser tal que el marge inferior de la imatge de l'sprite coincideixi amb el marge inferior de la pantalla. .. py:method:: update() Mou el sprite un píxel cap avall, i si la posició vertical arriba a ser positiva, el situa com estava inicialment. Es recomana utilitzar el mètode `blit de les Surfaces de Pygame `_ per a copiar la imatge de fons sobre la de l'sprite. Disposeu de jocs de proves al fitxer :download:`test-scrolling.txt` i d'un programa principal per a poder provar el funcionament de la classe al fitxer :download:`main.py` que utilitza les imatges :download:`fons.jpg` i :download:`nau.png`. Aquest programa, funcionant correctament ha de mostrar una nau al centre de la pantalla amb un fons compost per un cel estrellat i una lluna que es desplaça cap avall un píxel per frame, indefinida i cíclicament. #. Generalitzeu la classe :py:class:`Fons` de manera que :py:meth:`__init__` ara admeti una image de mides arbitràries com a paràmetre. El primer haurà de fer és escalar la imatge rebuda a la mida de la pantalla. Es recomana utilitzar una de les funcions d'escalat del mòdul `transform de Pygame `_. #. Generalitzeu encara més la classe :py:class:`Fons` per tal que la velocitat d'*scrolling* del fons sigui arbitrària. Ara, el mètode :py:meth:`__init__` ha d'admetre un paràmetre addicional, la velocitat (en fps) a la qual es mourà el fons, que caldrà guardar com a nou atribut. Intenteu a més a més que aquesta velocitat no sigui obligatòriament un valor enter. #. Modifiqueu el programa principal de manera que quan es premi la tecla del cursor cap amunt, augmenti la velocitat de *scrolling*, i quan es premi la tecla del cursor cap avall, disminueixi. Òbviament, haureu de limitar la velocitat màxima i mínima. #. Canvieu el programa de tal forma que enlloc de fer un scrolling vertical, faci un scrolling horitzontal d'una altra imatge de fons.