Scrolling vertical¶
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:
Al fitxer
fons.py
, escriviu la classeFons
, derivant-la dels sprites de Pygame:- class fons.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:
- __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.
- 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
test-scrolling.txt
i d’un programa principal per a poder provar el funcionament de la classe al fitxermain.py
que utilitza les imatgesfons.jpg
inau.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
Fons
de manera que__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
Fons
per tal que la velocitat d”scrolling del fons sigui arbitrària. Ara, el mètode__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.