Creació de jocs amb PyBadge

Programació Dades pràctiques     Recursos CITCEA
Tutorial Exemples Projectes   Inici

Afegim sons

Anem a afegir un so al programa amb múltiples sprites. Per fer aquest exemple emprarem el fitxer de so pew.wav (el podem descarregar picant amb el botó dret sobre l'enllaç). El so s'emetrà cada cop que l'sprite reboti a la vora de la pantalla.

A continuació tenim el programa, en el qual hem marcat les línies afegides o modificades.

import ugame
import stage
class Bloc(stage.Sprite):
    def __init__(self, x, y):
        super().__init__(banc, 1, x, y)
        self.incx = 2
        self.incy = 2
    def update(self):
        super().update()
        self.set_frame(self.frame % 4 + 1)
        self.move(self.x + self.incx, self.y + self.incy)
        if not 0 < self.x < 144:  # 160 - 16 = 144
            self.incx = -self.incx
            sons.play(so_rebot)
        if not 0 < self.y < 112:  # 128 - 16 = 112
            self.incy = -self.incy
            sons.play(so_rebot)
banc = stage.Bank.from_bmp16("bloc.bmp")
fons = stage.Grid(banc, 10, 8)
bloc1 = Bloc(32, 40)
bloc2 = Bloc(64, 0)
bloc3 = Bloc(96, 80)
joc = stage.Stage(ugame.display, 12)
blocs = [bloc1, bloc2, bloc3]
joc.layers = [bloc1, bloc2, bloc3, fons]
joc.render_block()
so_rebot = open("pew.wav", 'rb')
sons = ugame.audio
sons.mute(False)
while True:
    for element in blocs:
        element.update()
    joc.render_sprites(blocs)
    joc.tick()

En el programa, abans del bucle principal, hem obert el fitxer de so per a lectura; també hem creat un objecte de so. Després li diem que el so no estigui desactivat; aquesta opció és molt interessant si, per exemple, volem que es pugui tenir un mode de joc silenciós.

En l'actualització de l'objecte corresponent als sprites, fem que el so es reprodueixi cada cop que el bloc topa amb la vora de la pantalla.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.