C++ audiere , problem z zatrzymanie i wznowieniem utworu

2011-10-08 23:21
0

Witam! Postanowiłem dziś pobawić się biblioteką Audiere. Chciałem zrobić przycisk za pomocą którego mogę zatrzymać/wznowić utwór. Niestety aby zatrzymać utwór muszę mieć ciągle wciśnięty klawisz myszy na guziku. Co robię nie tak?
Dodam, że klawisz i parę innych drobiazgów jest pisane w allegro.

 bool play = false;

if (mx >= 20 && mx <= 180 && my >= 280 && my <= 390 && mb == 1)
{
    if( !play )
    {
       st->play();
        play = true;
    }
} else
{
    st->stop();
    play = false;
}
edytowany 1x, ostatnio: Langol, 2011-10-08 23:22
Źle klamry są? else ma się odnosił do if ( !play ), a nie do if'a, w którym sprawdzasz czy wcisnąłeś przycisk. - stfu 2011-10-09 17:17
odnosić* - stfu 2011-10-09 17:17

Pozostało 580 znaków

2011-10-09 21:41
0

Problem rozwiązany.

 if( key[KEY_Q])
                        if(st2->isPlaying()==true)
                         {
                                             st2-> stop();
                                             }
                                             else
                                              {
                                                  st2 -> play();
                                                  }      

i

Problem jest za to z kliknięciem. Trzeba na przycisk kliknac szybko i delikatnie zeby sie ladnie zatrzymal, inaczej sie zawiesza..

edytowany 1x, ostatnio: Langol, 2011-10-09 21:41

Pozostało 580 znaków

2011-10-10 01:41
0

Problem jest najprawdopodobniej w tym, że zmiana stanu odtwarzania wywoływana jest za każdym obrotem głównej pętli kiedy przycisk jest wciśnięty. Rozwiązaniem, jeżeli allegro nie ma gotowych funkcji, jest przechowywanie stanu przycisku w poprzednim obrocie pętli. Jeżeli się zmienił (z 1 na 0 lub na odwrót, zależy jak ma przycisk działać) to wywołaj kod, który ma być po kliknięciu.

Pozostało 580 znaków

2011-10-10 20:21
bool kk;
st->play();

//petla

if(mb==0)
{
play=false;
} 

if (mx >= 20 && mx <= 180 && my >= 280 && my <= 390 && mb == 1 && play==false && kk==true)
{
       st->play();
       play=true;
       kk=false;
} 

if (mx >= 20 && mx <= 180 && my >= 280 && my <= 390 && mb == 1 && play==false && kk==false)
{
    st->stop();
    play=true;
    kk=true;
}

nie jestem pewny czy zadziała, wrazie czego pisz na pw

edytowany 2x, ostatnio: ferdzio, 2011-10-10 20:28

Pozostało 580 znaków

2011-10-10 20:34
0

@ferdzio
śmiga jak ta lala. Podziękować!.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0