Reproduccion de sonido en el salto

Hola,estoy contento de que por fin pude entrar al foro!!! queria hacerles una pregunta que tengo con el codigo de un actor.acabo de crear una clase llamado mario.el problema esta en el sonido,porque quiero que cuando salte se reproduzca el sonido,el tema es que lo hace pero el pero el sonido se reproduce cuando vuelve a tocar la plataforma como hago para que el actor reproduzca el sonido de salto una sola cuando comienza el saltor?.les paso el codigo:

import pilas
from pilas.actores import Actor
from pilas.comportamientos import Comportamiento



reproduccion=0
Velocidad=5

pilas.iniciar(titulo="Mario")


class Mario(Actor):
      
    def __init__(self, x=0, y=0):
        pilas.actores.Actor.__init__(self, x=x, y=y)
        self.imagen = pilas.imagenes.cargar_grilla("papermario.png",3)  
        self.cuadro = self.imagen
        self.cuadro =0
        self.arriba = 90        
        self.izquierda = -320
        self.definir_cuadro(0)
        self.hacer(Esperando())
        
    def definir_cuadro(self, indice):
        self.imagen.definir_cuadro(indice)


class Esperando(Comportamiento):
    
    def iniciar(self, receptor):
        
        self.receptor = receptor
        self.receptor.definir_cuadro(0)

    def actualizar(self):
        if pilas.escena_actual().control.izquierda:
            
            self.receptor.hacer(Caminando())
        elif pilas.escena_actual().control.derecha:
            self.receptor.hacer(Caminando())

        if pilas.escena_actual().control.arriba:
            self.receptor.hacer(Saltando())


class Caminando(Comportamiento):
    
    def iniciar(self, receptor):
        self.receptor = receptor
        self.cuadros = [0,0,0,0,0,1,1,1,1,1]
        self.paso = 0

    def actualizar(self):
        self.avanzar_animacion()

        if pilas.escena_actual().control.izquierda:
            self.receptor.x -= Velocidad
            self.receptor.espejado = True
            
        elif pilas.escena_actual().control.derecha:
            self.receptor.x += Velocidad
            self.receptor.espejado = False
        else:
            self.receptor.hacer(Esperando())
           
        if pilas.escena_actual().control.arriba:
            self.receptor.hacer(Saltando())

    def avanzar_animacion(self):
        self.paso += 1

        if self.paso >= len(self.cuadros):
            self.paso = 0

        self.receptor.definir_cuadro(self.cuadros[self.paso])       




class Saltando(Comportamiento):
    """Representa al actor saltando con animación."""

    def iniciar(self, receptor):
        self.sound= pilas.sonidos.cargar('saltar.wav')
        self.dy = 10
        self.receptor = receptor
        self.receptor.definir_cuadro(2)
        self.origen = self.receptor.y
       
        
    def actualizar(self):
        self.receptor.y += self.dy
        self.dy -= 0.2
        
        if self.receptor.y < self.origen :
            self.sound.reproducir()
            self.receptor.y = self.origen
            self.receptor.hacer(Esperando())
            
        if pilas.escena_actual().control.izquierda:
            self.receptor.x -= Velocidad
            
            
            
        elif pilas.escena_actual().control.derecha:
            self.receptor.x += Velocidad

¡Hola Cristian!, pienso que podrías reproducir el sonido directamente en el método iniciar de salto así:

Eso sí, si hacés el cambio, tendrías que eliminar la linea que dice self.sound.reproducir() que está mas abajo en tu código, donde dice if self.receptor.y < self.origen:, esa porción de código se ejecutará cuando el protagonista “toque” el suelo.

¡Saludos!

GRACIAS HUGO!!! FUNCIONA BIEN… LA PRIMERA VEZ LO PUSE AHI PERO EL SONIDO SE REPETIA VAYA A SABER PORQUE…PERO AHORA NO

Oh, ¡¡¡ genial !!!, avisanos cualquier cosa.

un post fue trasladado a un nuevo tema: Problemas reproduciendo sonido