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

[Allegro 4.2] play_sample i allegro_message

Ostatnio zmodyfikowano 2013-01-19 23:22
Autor Wiadomość
goovie
Temat założony przez niniejszego użytkownika
[Allegro 4.2] play_sample i allegro_message
» 2012-12-24 13:40:00
Napisalem ostatnio bardzo prosta gre z wykorzystaniem allegro, a mianowicie kolko i krzyzyk.

Chcialem aby po postawieniu pionka (kolka lub krzyzyka) na planszy byl odtwarzany dzwiek, wykorzystalem do tego funkcje play_sample.
W moim programie po zakonczeniu gry, aby poinformowac gracza jak potoczyla sie rozgrywka (tzn. wypisuje "remis", "wygraly kolka" lub "wygraly krzyzyki") wykorzystuje allegro_message.

Kod skrotowo wyglada m/w tak:
C/C++
//...
while( czy_koniec_gry() == false )
{
    ruch gracza( gracz );
    play_sample( dzwiek, 255, 127, 1000, 0 );
}

if( wygral_krzyzyk() == true ) allegro_message( "wygral krzyzyk" );

if( wygral_kolko() == true ) allegro_message( "wygral kolko" );

if( remis() == true ) allegro_message( "remis" );
//...

Funkcja dziala bardzo dobrze, dzwiek jest prawidlowo odtwarzany kiedy gracz postawi swoj pionek, ale kiedy jest koniec gry i odtwarzanie dzwieku dalej trwa (po ostatnim postawieniu pionka) i w tym czasie (jest to krotki czas, bodajze 0.25s) zostaje wywolana funkcja allegro_message to caly czas odtwarzany jest moj dzwiek dopoki nie zamkne okienka.

Nawet jezeli dodam funkcje stop_sample, adjust sample czy usune calkowicie moj dzwiek z pamieci to blad wystepuje dalej.

np.

C/C++
//...
while( czy_koniec_gry() == false )
{
    ruch gracza( gracz );
    play_sample( dzwiek, 255, 127, 1000, 0 );
}
stop_sample( dzwiek );
if( wygral_krzyzyk() == true ) allegro_message( "wygral krzyzyk" );

if( wygral_kolko() == true ) allegro_message( "wygral kolko" );

if( remis() == true ) allegro_message( "remis" );
//...

Nie pomaga mi rozwiazac problemu.

Zastosowanie funkcji rest() dziala, ale to bez sensu czekac ten ulamek sekundy az odtwarzanie dzwieku sie skonczy, aby zobaczyc wynik gry.

Ktos wie jak moge temu zaradzic?
P-71840
unimator
» 2013-01-07 21:10:54
A czy przypadkiem funkcja play_sample() nie tworzy nowego wątku? W takim wypadku umieszczenie jej w pętli (w sposób, jaki to zrobiłeś) jest błędem.
P-73278
goovie
Temat założony przez niniejszego użytkownika
» 2013-01-19 23:22:26
W takim razie jak mam napisać ten fragment kodu, który sprawi że po ustawieniu pionka na planszy zagra mi dźwięk?
P-74438
« 1 »
  Strona 1 z 1