IIC2233 / Syllabus-2022-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.ing.puc.cl/
45 stars 40 forks source link

Problema con el sonido del disparo #187

Closed nicoperez12 closed 2 years ago

nicoperez12 commented 2 years ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola! Tengo un problema al implementar el sonido del disparo porque cuando corro el código y disparo, por alguna razón se me congela como por un segundo el juego y de ahí vuelve, pero si corro el código sin el sonido me anda bien. Será porque mi computador se demora un poco en procesar el sonido? Gracias.

CristobalPerez-Cotapos commented 2 years ago

Hola!! por lo que me comentas me imagino que tu que el sonido se está ejecutando en el mismo thread que tu ventana de juego, por lo que durante ese segundo se demora en procesar y se te congela toda la ventana. En este caso mi consejo es que intentes inicial el sonido de disparo en un thread aparte, de tal forma que este se ejecute de manera independiente y tu ventana de juego se comporte de manera fluida. Intenta implementarlo de esta manera y coméntame si te resulta, suerte!! 😄

M4rtinL4gies commented 2 years ago

Hola! Me quería sumar a la pregunta, pues tengo el mismo problema. Estuve harto rato intentando solucionarlo, e incluso con la ejecución del sonido en un thread aparte se pega un rato la pantalla. Lo que es extraño, es que este tiempo parece variar (el primer disparo es siempre el que más rato congela la pantalla, mientras que si realizo disparos continuos, la pantalla no se pega). Tenía, entonces, la misma duda: si era posible que el juego se congelara porque el computador se demora en procesar el sonido. pd: si quito la ejecución del sonido, el juego tampoco se congela.

CristobalPerez-Cotapos commented 2 years ago

Hola Martín!! Es raro que con la implementación de threads se te siga congelando, personalmente me imagino que tuviste algún error al implementarlos. Esto se puede dar por el uso de señales, ya que como las señales están comunicando los distintos threads, es posible que estés creando un thread nuevo pero el sonido se termine ejecutando igualmente en el thread de la ventana de juego (se que suena como un trabalenguas, pero intenta darle una vuelta jajaj). Lo otro que podría estar pasando es que cada vez que cada vez que dispares estés creando una nueva instancia de sonido, y por eso tu ejecución del programa se esté demorando. Comentame si alguno de estos es tu caso y como te va funcionando todo 😄

M4rtinL4gies commented 2 years ago

Estuve revisando mi código, y efectivamente, en cada una de las soluciones que se me ocurrieron, estuve implementando únicamente uno de los dos puntos que mencionas, no ambos a la vez. Ahora modifiqué unas lineas y funciona correctamente. Muchas gracias por la ayuda!

CristobalPerez-Cotapos commented 2 years ago

De nada!! suerte con el resto de la tarea 😉

agustind1 commented 2 years ago

Hola! A que se refieren con iniciar el sonido en un Thread aparte? Por ejemplo enviar una señal desde la ventana del juego a la lógica? Tengo el mismo problema con el sonido y no me funciona.

CristobalPerez-Cotapos commented 2 years ago

Hola!! Lo que pasa es que si mandas una señal al backend este mandara una señal de vuelta que se unirá al thread principal de la ventana (y por lo tanto la volverá más lenta). La idea entonces es crear un thread que funcione independiente de la ventana y que tenga como objetivo hacer sonar la música. Si te quedan dudas cuéntame!!

agustind1 commented 2 years ago

Hola!! Lo que pasa es que si mandas una señal al backend este mandara una señal de vuelta que se unirá al thread principal de la ventana (y por lo tanto la volverá más lenta). La idea entonces es crear un thread que funcione independiente de la ventana y que tenga como objetivo hacer sonar la música. Si te quedan dudas cuéntame!!

Probé creando una clase Qthread y tambien con threading, pero no me funcionó con ninguna de las dos opciones. No se si te refieres a hacer algo así o a otra cosa

CristobalPerez-Cotapos commented 2 years ago

No te puedo decir mucho más, por que sería darte la respuesta 🤐, pero no es necesario crear una clase qthread, sino que basta con hacer una instancia que se dedique a efectuar el sonido y que funcione independientemente de las ventana de juego