Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z dźwiękiem [SFML]

Ostatnio zmodyfikowano 2017-12-04 18:33
Autor Wiadomość
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.

C/C++
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;
       
       
       
       
        //dodaj_dzwieki_cprzedmioty();
        //1
        if( !bufferpodnoszezbroje[ 0 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//podnosze1.wav" ) )
             ochronalodowe = 80;
       
        if( !bufferpodnoszezbroje[ 1 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//podnosze2.wav" ) )
             ochronalodowe = 80;
       
        //2
        if( !bufferzakladamzbroje[ 0 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//zakladam1.wav" ) )
             ochronalodowe = 80;
       
        if( !bufferzakladamzbroje[ 1 ]->loadFromFile( "data//dzwieki//przedmioty//zbroje//zakladam2.wav" ) )
             ochronalodowe = 80;
       
        //3
        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 ]
P-167491
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.
C/C++
twoj kod
P-167492
j23
» 2017-12-03 18:39:44
Dlaczego slashe w ścieżkach dajesz podwójnie?
P-167504
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.
P-167527
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.
P-167529
« 1 »
  Strona 1 z 1