Replicando en C++ el código del motor Pilas, agregué funciones para cargar sonidos al actor de ejemplo (el mono):
- Código: Seleccionar todo
- Mono::Mono() {
 imagen_normal.LoadFromFile( "data/mono_normal.png" );
 imagen_grito.LoadFromFile( "data/mono_grita.png" );
 imagen_sonrisa.LoadFromFile( "data/mono_sonrie.png" );
 
 //~ Esto no funciona (no da error, pero no se reproduce el sonido)
 //~ sonido_sonrisa = Pilas::cargar_sonido( "data/sonrisa.wav" );
 //~ sonido_grito = Pilas::cargar_sonido( "data/grito.wav" );
 //~ Esto si funciona
 sf::SoundBuffer bufer1, bufer2;
 bufer1.LoadFromFile( "data/sonrisa.wav" );
 bufer2.LoadFromFile( "data/grito.wav" );
 
 sonido_sonrisa.SetBuffer( bufer1 );
 sonido_grito.SetBuffer( bufer2 );
 
 SetImage( imagen_normal );
 _establecer_origen_en_centro();
 }
Ese código me funciona perfecto, al momento de llamar a las funciones pertinentes dentro de Mono, los sonidos se reproducen. Pero, usando el código que está comentado, los sonidos no se reproducen. La función cargar_sonido está en sonido.cpp:
- Código: Seleccionar todo
- #include "sonido.h"
 #include <iostream>
 using std::cout;
 using std::endl;
 namespace Pilas {
 sf::Sound cargar_sonido( const string& archivo ) {
 sf::SoundBuffer bufer;
 sf::Sound sonido;
 
 if ( !bufer.LoadFromFile( archivo ) ) {
 cout << "Error al cargar " << archivo << endl;
 }
 
 sonido.SetBuffer( bufer );
 
 return sonido;
 }
 }
Sin embargo, si en el main hago esto:
- Código: Seleccionar todo
- //~ // aquí si funciona cargando sonido con Pilas::cargar_sonido
 sf::Sound prueba = Pilas::cargar_sonido( "data/grito.wav" );
 prueba.Play();
El sonido se reproduce correctamente.
Tengo la duda con el hecho de usar sf::SoundBuffer temporales que se liberan incluso antes de hacer uso del sf::Sound que se creó a partir de ellos, pero en el main no tuve el problema de la reproducción, por eso sospecho que es algún tipo de acceso o declaración que no hice o que debía hacer de otra forma, pero en estos momentos tengo ganas de irme a dormir
 . Si alguien tiene oportunidad de darle un vistazo, el código completo está en este repositorio: http://bitbucket.org/josejorge/pilascpp
. Si alguien tiene oportunidad de darle un vistazo, el código completo está en este repositorio: http://bitbucket.org/josejorge/pilascpp
