Problem z dźwiękiem [SFML]
Ostatnio zmodyfikowano 2017-12-04 18:33
dominator Temat założony przez niniejszego użytkownika |
Problem z dźwiękiem [SFML] » 2017-12-03 13:27:09 Witam od kilku miesięcy ucze się programować w c++. Jestem mocno zmotywowany do nauki, ponieważ bardzo chciałbym napisać gre w którą mogli by grać niewidomi. Zacząłem pisać mój projekt kożystając z sfml 2.0 i kiedy rozpocząłem dodawanie kilku obiektów do gry pojawił się problem z dźwiękiem, a mianowicie pierwsze obiekty go posiadają ale następne już nie do tego pojawia się komunikat: An internal OpenAL call failed in SoundSource.cpp (65) : AL_INVALID_NAME, an unacceptable name has been specified. Udało mi się odrobine zminimalizować problem kiedy obiekt klasy sf::Sound dynamicznie alokowałem, ale tylko kilka obiektów więcej ma teraz dźwięki, co nie rozwiązuje mojego problemu. Prosze o pomoc poniżej daje kod jednego z obiektów prośba również o wyrozumiałość zdaje sobie sprawe że mój kod pozostawia wiele do życzenia. class clekka_zbroja : public cprzedmioty { public: clekka_zbroja( double wx, double wy ) { soundwolacz[ 0 ] = new sf::Sound; for( int i = 0; i < 1; ++i ) soundwolacz[ i ]->setBuffer( bufferwolacz[ i ] ); for( int i = 0; i < 10; ++i ) { bufferpodnoszezbroje[ i ] = new sf::SoundBuffer; bufferzakladamzbroje[ i ] = new sf::SoundBuffer; bufferzdejmujezbroje[ i ] = new sf::SoundBuffer; soundpodnoszezbroje[ i ] = new sf::Sound; soundzakladamzbroje[ i ] = new sf::Sound; soundzdejmujezbroje[ i ] = new sf::Sound; } nazwa = "lekka zbroja"; x = wx; y = wy; typprzedmiot = 1; typfizyczne = true; typlodowe = true; ochronafizyczne = 20; ochronalodowe = 80; if( !bufferpodnoszezbroje[ 0 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//podnosze1.wav" ) ) ochronalodowe = 80; if( !bufferpodnoszezbroje[ 1 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//podnosze2.wav" ) ) ochronalodowe = 80; if( !bufferzakladamzbroje[ 0 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//zakladam1.wav" ) ) ochronalodowe = 80; if( !bufferzakladamzbroje[ 1 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//zakladam2.wav" ) ) ochronalodowe = 80; if( !bufferzdejmujezbroje[ 0 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//zdejmuje1.wav" ) ) ochronalodowe = 80; if( !bufferzdejmujezbroje[ 1 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//zdejmuje2.wav" ) ) ochronalodowe = 80; for( int i = 0; i < 2; ++i ) soundpodnoszezbroje[ i ]->setBuffer( * bufferpodnoszezbroje[ i ] ); for( int i = 0; i < 2; ++i ) soundzakladamzbroje[ i ]->setBuffer( * bufferzakladamzbroje[ i ] ); for( int i = 0; i < 2; ++i ) soundzdejmujezbroje[ i ]->setBuffer( * bufferzdejmujezbroje[ i ] ); } int lezy_przedmiot() { soundwolacz[ 0 ]->setPosition( x, 0, y ); soundwolacz[ 0 ]->setRelativeToListener( false ); soundwolacz[ 0 ]->setMinDistance( 100 ); soundwolacz[ 0 ]->setAttenuation( 10 ); if( clock.getElapsedTime().asSeconds() >= 3 ) { soundwolacz[ 0 ]->play(); clock.restart(); } } int podniesc_przedmiot() { soundpodnoszezbroje[ 0 ]->setRelativeToListener( true ); if( clockr.getElapsedTime().asSeconds() >= 3 ) { soundpodnoszezbroje[ 0 ]->play(); clockr.restart(); } } int wyjmij_przedmiot() { soundzakladamzbroje[ 0 ]->setRelativeToListener( true ); soundzakladamzbroje[ 0 ]->play(); } int schowaj_przedmiot() { soundzdejmujezbroje[ 0 ]->setRelativeToListener( true ); soundzdejmujezbroje[ 0 ]->play(); return 0; } ~clekka_zbroja() { for( int i = 0; i < 10; ++i ) { delete bufferpodnoszezbroje[ i ]; delete bufferzakladamzbroje[ i ]; delete bufferzdejmujezbroje[ i ]; delete soundpodnoszezbroje[ i ]; delete soundzakladamzbroje[ i ]; delete soundzdejmujezbroje[ i ]; } delete soundwolacz[ 0 ]; } }; [ / i ] |
|
RazzorFlame |
» 2017-12-03 13:35:50 Daj kod między [ cpp] i [ /cpp] (bez spacji) Otrzymasz taki efekt i łatwiej będzie Ci pomóc. |
|
j23 |
» 2017-12-03 18:39:44 Dlaczego slashe w ścieżkach dajesz podwójnie? |
|
dominator Temat założony przez niniejszego użytkownika |
» 2017-12-04 17:29:03 shashe sa podwójne w ścieżkach ,ponieważ takk się nauczyłem z poradnika. |
|
j23 |
» 2017-12-04 18:33:59 W takim razie ten poradnik jest do d..y. Slashy (/) nie musisz dawać podwójnie, bo to zwykły znak. Podwójnie dajesz backslashe (\), ponieważ w literale znakowym/tekstowym jest to znak specjalny (tzw. escape character). Czyli w windowsowych ścieżkach ukośniki dajesz podwójnie, w uniksowych - nie. |
|
« 1 » |