Etiqueta de sonido en cada opción del menú

Losersjuegos cuenta con una secciones de ejemplos en su web. Utilice esta sección para consultar o proponer ideas acerca de ellos.

Etiqueta de sonido en cada opción del menú

Notapor joenco » Vie Jun 01, 2012 2:20 am

Hola, disculpen si estoy realizando la pregunta en el lugar equivocado, ahora bien, lo que me gustaŕia saber es como hago para colocar una etiqueta de sonido a cada opción del menú, por ejemplo, tengo las etiquetas de sonido "Nuevo", "Credito", Salir" y que debeŕia hacer para que cuando este navegando por cada opción del menú, estas sean reproducidas?

Lo pregunto, ya que soy una persona con discapacidad visual y quiero crear un juego donde todos podamos jugar sin problemas, como yo se que algunos no le gustara que la etiqueta se reproduzca, pienso tener una opción para desactivar estos sonidos.

Gracias y espero haberme explicado.

Un saludo.
“No nos atrevemos a muchas cosas porque son difíciles, pero son difíciles porque no nos atrevemos a hacerlas”
Avatar de Usuario
joenco
 
Mensajes: 4
Registrado: Vie Jun 01, 2012 1:58 am
Ubicación: Mérida-Venezuela.

Re: Etiqueta de sonido en cada opción del menú

Notapor kiketom » Vie Jun 01, 2012 5:26 pm

¿Con que estás programando el juego?
Avatar de Usuario
kiketom
 
Mensajes: 82
Registrado: Lun Ene 03, 2011 3:01 pm
Ubicación: Valencia, España

Re: Etiqueta de sonido en cada opción del menú

Notapor joenco » Vie Jun 01, 2012 10:52 pm

oye se me paso ese detalle, estoy programando con pygame y usando como plantilla el ejemplo de como crear menús, que se encuentra en esta misma página.
“No nos atrevemos a muchas cosas porque son difíciles, pero son difíciles porque no nos atrevemos a hacerlas”
Avatar de Usuario
joenco
 
Mensajes: 4
Registrado: Vie Jun 01, 2012 1:58 am
Ubicación: Mérida-Venezuela.

Re: Etiqueta de sonido en cada opción del menú

Notapor joenco » Sab Jun 09, 2012 5:34 pm

Hola, bueno ya logré por lo menos que reproduzca las etiquetas de sonido en cada opción del menú, pero no he podido hacer que cuando cambie de opción, la que se estaba reproduciendo antes, ya no lo haga, aquí esta el codigo por si alguien sabe como hacer eso:

Código: Seleccionar todo
# -*- coding: utf-8 -*-
#
# autor: Hugo Ruscitti
# Modificado y adaptado por: Jorge Ortega.
# web: www.losersjuegos.com.ar
# licencia: GPL 2

import random
import pygame
from pygame.locals import *
import os
import sys

IMG_DIR = "Imagenes"
SONIDO_DIR = "Sonidos"

def load_image(nombre, dir_imagen, alpha=False):
    # Encontramos la ruta completa de la imagen
    ruta = os.path.join(dir_imagen, nombre)
    try:
        image = pygame.image.load(ruta)
    except:
        print "Error, no se puede cargar la imagen: ", ruta
        sys.exit(1)
    # Comprobar si la imagen tiene "canal alpha" (como los png)
    if alpha == True:
        image = image.convert_alpha()
    else:
        image = image.convert()
    return image

def load_sound(nombre, dir_sonido):
    ruta = os.path.join(dir_sonido, nombre)
    # Intentar cargar el sonido
    try:
        sonido = pygame.mixer.Sound(ruta)
    except pygame.error, message:
        print "No se pudo cargar el sonido:", ruta
        sonido = None
    return sonido

class Opcion:

    def __init__(self, fuente, titulo, x, y, paridad, funcion_asignada, sonido):
        self.imagen_normal = fuente.render(titulo, 1, (0, 0, 0))
        self.imagen_destacada = fuente.render(titulo, 1, (200, 0, 0))
        self.image = self.imagen_normal
        self.rect = self.image.get_rect()
        self.rect.x = 500 * paridad
        self.rect.y = y
        self.funcion_asignada = funcion_asignada
        self.x = float(self.rect.x)
        self.sonido = sonido

    def actualizar(self):
        destino_x = 105
        self.x += (destino_x - self.x) / 5.0
        self.rect.x = int(self.x)

    def imprimir(self, screen):
        screen.blit(self.image, self.rect)

    def destacar(self, estado):
        if estado:
            self.image = self.imagen_destacada
        else:
            self.image = self.imagen_normal

    def activar(self):
        self.funcion_asignada()


    def reproducir(self, sonido, select):
        if select==select:
            self.sonido.play()
        else:
            self.sonido.stop()

    def pausar(self, sonido):
        self.sonido.stop()

class Cursor:

    def __init__(self, x, y, dy):
        self.image = load_image("cursor.png", IMG_DIR, alpha=True)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.y_inicial = y
        self.dy = dy
        self.y = 0
        self.seleccionar(0)

    def actualizar(self):
        self.y += (self.to_y - self.y) / 10.0
        self.rect.y = int(self.y)

    def seleccionar(self, indice):
        self.to_y = self.y_inicial + indice * self.dy

    def imprimir(self, screen):
        screen.blit(self.image, self.rect)

class Menu:
    "Representa un menú con opciones para un juego"
   
    def __init__(self, opciones):
        self.opciones = []
        fuente = pygame.font.Font('dejavu.ttf', 24)
        x = 405
        y = 305
        paridad = 1

        self.cursor = Cursor(x - 30, y, 30)

        for titulo, funcion, sonido in opciones:
            self.opciones.append(Opcion(fuente, titulo, x, y, paridad, funcion, sonido))
            y += 30
            if paridad == 1:
                paridad = -1
            else:
                paridad = 1

        self.seleccionado = 0
        self.total = len(self.opciones)
        self.mantiene_pulsado = False

    def actualizar(self):
        """Altera el valor de 'self.seleccionado' con los direccionales."""

        k = pygame.key.get_pressed()
        if not self.mantiene_pulsado:
            if k[K_UP]:
                self.seleccionado -= 1
                if self.seleccionado >= 0:
                    self.opciones[self.seleccionado].reproducir(sonido, self.seleccionado)
                    #self.opciones[self.seleccionado].pausar(sonido)
            elif k[K_DOWN]:
                self.seleccionado += 1
                if self.seleccionado <= self.total-1:
                    self.opciones[self.seleccionado].reproducir(sonido, self.seleccionado)
            elif k[K_RETURN]:
                # Invoca a la función asociada a la opción.
                self.opciones[self.seleccionado].activar()

        # procura que el cursor esté entre las opciones permitidas
        if self.seleccionado < 0:
            self.seleccionado = 0
            self.opciones[self.seleccionado].reproducir(sonido)
        elif self.seleccionado > self.total - 1:
            self.seleccionado = self.total - 1
            self.opciones[self.seleccionado].reproducir(sonido)

        self.cursor.seleccionar(self.seleccionado)

        # indica si el usuario mantiene pulsada alguna tecla.
        self.mantiene_pulsado = k[K_UP] or k[K_DOWN] or k[K_RETURN]

        self.cursor.actualizar()
     
        for o in self.opciones:
            o.actualizar()

    def imprimir(self, screen):
        """Imprime sobre 'screen' el texto de cada opción del menú."""

        self.cursor.imprimir(screen)

        for opcion in self.opciones:
            opcion.imprimir(screen)

def sonido(self, nombre):
    self.nombre.stop()

def comenzar_nuevo_juego():
    print " Función que muestra un nuevo juego."

def mostrar_opciones():
    print " Función que muestra otro menú de opciones."

def creditos():
    print " Función que muestra los creditos del programa."

def salir_del_programa():
    import sys
    print " Gracias por utilizar este programa."
    sys.exit(0)


if __name__ == '__main__':
   
    salir = False

    pygame.mixer.init()
    sonido1 = load_sound("nuevo.wav", SONIDO_DIR)
    sonido2 = load_sound("opciones.wav", SONIDO_DIR)
    sonido3 = load_sound("creditos.wav", SONIDO_DIR)
    sonido4 = load_sound("salir.wav", SONIDO_DIR)

    opciones = [
        ("Jugar", comenzar_nuevo_juego, sonido1),
        ("Opciones", mostrar_opciones, sonido2),
        ("Creditos", creditos, sonido3),
        ("Salir", salir_del_programa, sonido4)
        ]

    pygame.font.init()
    pygame.mixer.init()
    screen = pygame.display.set_mode((1024, 720))
    pygame.display.set_caption("Ejemplo de un menú hablado")
    fondo = load_image("fondo.png", IMG_DIR, alpha=False)
    menu = Menu(opciones)

    while not salir:

        for e in pygame.event.get():
            if e.type == QUIT:
                salir = True

        screen.blit(fondo, (0, 0))
        menu.actualizar()
        menu.imprimir(screen)

        pygame.display.flip()
        pygame.time.delay(10)
“No nos atrevemos a muchas cosas porque son difíciles, pero son difíciles porque no nos atrevemos a hacerlas”
Avatar de Usuario
joenco
 
Mensajes: 4
Registrado: Vie Jun 01, 2012 1:58 am
Ubicación: Mérida-Venezuela.

Re: Etiqueta de sonido en cada opción del menú

Notapor joenco » Sab Jun 09, 2012 5:42 pm

Disculpen, me equivoque de código, ese era de unas pruebas, este si es el correcto:
Código: Seleccionar todo
# -*- coding: utf-8 -*-
#
# autor: Hugo Ruscitti
# Modificado y adaptado por: Jorge Ortega.
# web: www.losersjuegos.com.ar
# licencia: GPL 2

import random
import pygame
from pygame.locals import *
import os
import sys

IMG_DIR = "Imagenes"
SONIDO_DIR = "Sonidos"

def load_image(nombre, dir_imagen, alpha=False):
    # Encontramos la ruta completa de la imagen
    ruta = os.path.join(dir_imagen, nombre)
    try:
        image = pygame.image.load(ruta)
    except:
        print "Error, no se puede cargar la imagen: ", ruta
        sys.exit(1)
    # Comprobar si la imagen tiene "canal alpha" (como los png)
    if alpha == True:
        image = image.convert_alpha()
    else:
        image = image.convert()
    return image

def load_sound(nombre, dir_sonido):
    ruta = os.path.join(dir_sonido, nombre)
    # Intentar cargar el sonido
    try:
        sonido = pygame.mixer.Sound(ruta)
    except pygame.error, message:
        print "No se pudo cargar el sonido:", ruta
        sonido = None
    return sonido

class Opcion:

    def __init__(self, fuente, titulo, x, y, paridad, funcion_asignada, sonido):
        self.imagen_normal = fuente.render(titulo, 1, (0, 0, 0))
        self.imagen_destacada = fuente.render(titulo, 1, (200, 0, 0))
        self.image = self.imagen_normal
        self.rect = self.image.get_rect()
        self.rect.x = 500 * paridad
        self.rect.y = y
        self.funcion_asignada = funcion_asignada
        self.x = float(self.rect.x)
        self.sonido = sonido

    def actualizar(self):
        destino_x = 105
        self.x += (destino_x - self.x) / 5.0
        self.rect.x = int(self.x)

    def imprimir(self, screen):
        screen.blit(self.image, self.rect)

    def destacar(self, estado):
        if estado:
            self.image = self.imagen_destacada
        else:
            self.image = self.imagen_normal

    def activar(self):
        self.funcion_asignada()


    def reproducir(self, sonido):
        self.sonido.play()

class Cursor:

    def __init__(self, x, y, dy):
        self.image = load_image("cursor.png", IMG_DIR, alpha=True)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.y_inicial = y
        self.dy = dy
        self.y = 0
        self.seleccionar(0)

    def actualizar(self):
        self.y += (self.to_y - self.y) / 10.0
        self.rect.y = int(self.y)

    def seleccionar(self, indice):
        self.to_y = self.y_inicial + indice * self.dy

    def imprimir(self, screen):
        screen.blit(self.image, self.rect)

class Menu:
    "Representa un menú con opciones para un juego"
   
    def __init__(self, opciones):
        self.opciones = []
        fuente = pygame.font.Font('dejavu.ttf', 24)
        x = 405
        y = 305
        paridad = 1

        self.cursor = Cursor(x - 30, y, 30)

        for titulo, funcion, sonido in opciones:
            self.opciones.append(Opcion(fuente, titulo, x, y, paridad, funcion, sonido))
            y += 30
            if paridad == 1:
                paridad = -1
            else:
                paridad = 1

        self.seleccionado = 0
        self.total = len(self.opciones)
        self.mantiene_pulsado = False

    def actualizar(self):
        """Altera el valor de 'self.seleccionado' con los direccionales."""

        k = pygame.key.get_pressed()
        if not self.mantiene_pulsado:
            if k[K_UP]:
                self.seleccionado -= 1
                if self.seleccionado >= 0:
                    self.opciones[self.seleccionado].reproducir(sonido)
                    #self.opciones[self.seleccionado].pausar(sonido)
            elif k[K_DOWN]:
                self.seleccionado += 1
                if self.seleccionado <= self.total-1:
                    self.opciones[self.seleccionado].reproducir(sonido)
            elif k[K_RETURN]:
                # Invoca a la función asociada a la opción.
                self.opciones[self.seleccionado].activar()

        # procura que el cursor esté entre las opciones permitidas
        if self.seleccionado < 0:
            self.seleccionado = 0
            self.opciones[self.seleccionado].reproducir(sonido)
        elif self.seleccionado > self.total - 1:
            self.seleccionado = self.total - 1
            self.opciones[self.seleccionado].reproducir(sonido)

        self.cursor.seleccionar(self.seleccionado)

        # indica si el usuario mantiene pulsada alguna tecla.
        self.mantiene_pulsado = k[K_UP] or k[K_DOWN] or k[K_RETURN]

        self.cursor.actualizar()
     
        for o in self.opciones:
            o.actualizar()

    def imprimir(self, screen):
        """Imprime sobre 'screen' el texto de cada opción del menú."""

        self.cursor.imprimir(screen)

        for opcion in self.opciones:
            opcion.imprimir(screen)

def sonido(self, nombre):
    self.nombre.stop()

def comenzar_nuevo_juego():
    print " Función que muestra un nuevo juego."

def mostrar_opciones():
    print " Función que muestra otro menú de opciones."

def creditos():
    print " Función que muestra los creditos del programa."

def salir_del_programa():
    import sys
    print " Gracias por utilizar este programa."
    sys.exit(0)


if __name__ == '__main__':
   
    salir = False

    pygame.mixer.init()
    sonido1 = load_sound("nuevo.wav", SONIDO_DIR)
    sonido2 = load_sound("opciones.wav", SONIDO_DIR)
    sonido3 = load_sound("creditos.wav", SONIDO_DIR)
    sonido4 = load_sound("salir.wav", SONIDO_DIR)

    opciones = [
        ("Jugar", comenzar_nuevo_juego, sonido1),
        ("Opciones", mostrar_opciones, sonido2),
        ("Creditos", creditos, sonido3),
        ("Salir", salir_del_programa, sonido4)
        ]

    pygame.font.init()
    pygame.mixer.init()
    screen = pygame.display.set_mode((1024, 720))
    pygame.display.set_caption("Ejemplo de un menú hablado")
    fondo = load_image("fondo.png", IMG_DIR, alpha=False)
    menu = Menu(opciones)

    while not salir:

        for e in pygame.event.get():
            if e.type == QUIT:
                salir = True

        screen.blit(fondo, (0, 0))
        menu.actualizar()
        menu.imprimir(screen)

        pygame.display.flip()
        pygame.time.delay(10)
“No nos atrevemos a muchas cosas porque son difíciles, pero son difíciles porque no nos atrevemos a hacerlas”
Avatar de Usuario
joenco
 
Mensajes: 4
Registrado: Vie Jun 01, 2012 1:58 am
Ubicación: Mérida-Venezuela.


Volver a Ejemplos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado