Ściszanie muzyki w menu - gra w Allegro

0

Witam!
Otoz tworze 'gre' za pomocą allegro w C++, do obsługi dźwięku wykorzystałem bibliotekę audiere. Mam pewien problem. Postanowiłem zrobić funkcje opcje. Znajduje sie w niej zakladka 'dzwiek' tam postanowilem zrobic wyciszanie muzyki (w menu i w grze)za pomocą klikanych guziczkow, niestety nie mam pojecia jak zmienic wartosc zmiennych globalnych (2 zmienne volume jedna odpowiedzialna za menu druga za gre).

Zmienne globalne:

 float volume=1.0;
float volume2=1.0; 

funkcja odpowiedzialna za sciszanie

 float glos(float vol)
{
 vol=vol-0.1;
 return vol;
}    

opcja 'dzwiek'

 // =================== dzwiek =================//
 void dzwiek()
{  

   sound = load_bmp("sound.bmp", default_palette); 
  
   while (!key[KEY_ESC])
           {
                        myszka();
                        masked_blit( sound,bufor, 0, 0, 0, 0, sound->w, sound->h );
if (mx >= 470 && mx <= 515 && my >= 110 && my <= 155 && mb == 1)
{ 
              glos(volume-0.1);
             
              }
if (mx >= 540 && mx <= 590 && my >= 110 && my <= 155 && mb == 1)
{ 
     
              glos(volume2-0.1);
              }
                        

textprintf_ex( bufor, font, 26, 26, makecol( 200, 200, 200 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mx, my, mb );
show_mouse( bufor ); 
blit( bufor, screen, 0, 0, 0, 0, 1024, 768 );}
}

Licze na jakies drobne rady, pozdrawiam

0

Geez...

Dlaczego dwa razy odejmujesz 0.1?

Nie pokazałeś funkcji ściszającej. Samo odejmowanie wartości od zmiennej typu float głośności nie zmieni... Musisz skorzystać z funkcji biblioteki, której używasz. Musisz tylko znaleźć nazwę metody.

A poza tym chyba sama biblioteka umarła, ostatnia wersja z 2006.02.13 :/

Polecam SDL_mixer do dźwięku, ma 3 lata mniej, ale przynajmniej w dokumentacji łatwo znaleźć informacje o zmianie głośności :D

Mix_VolumeChunk(Mix_Chunk *chunk, int volume) - Set or get the volume of a Mix_Chunk
Mix_Volume(int channel, int volume) - Set the volume of an SDL_Mixer Channel
Mix_VolumeMusic(int volume) - Set the volume of ONLY the designated music track

Oki, udało mi się znaleźć też dla audiere:
http://audiere.sourceforge.net/audiere-1.9.4-users-doxygen/classaudiere_1_1OutputStream.html

Funkcja glos powinna wykorzystywać setVolume do zmiany głośności, i nie musi nic zwracać (może być typu void).
W miejscach ściszania, dla volume:

volume-=0.1;
glos(volume);

dla volume2:

volume2-=0.1;
glos(volume2);
0
Langol napisał(a)

Licze na jakies drobne rady, pozdrawiam

to moja drobna rada jest taka, że nazwanie zmiennych globalnych do ściszania dźwięku
"volume1" i "volume2" nie jest dobrym pomysłem. Za jakiś czas wracając do kodu będziesz nadal pamiętać co jest co? Poza tym kod powinien opisywać sam siebie jak najpełniej.

0

Racja. Ogolnie sa dwie zmienne globalne bo jakby byla jedna to sciszajac dzwiek z menu sciszalbym tez ten w grze. Moge zmienic nazwe zmiennej na DzwiekMenu, DzwiekGra i juz wszystko bedzie jasne ;).

0

A poza tym chyba sama biblioteka umarła, ostatnia wersja z 2006.02.13
hę?
2011-11-06 - Allegro 5.0.5 released!
ostatnia wersja jest ze wczoraj.
(i żeby nie było, poprzednia jest z sierpnia)

http://alleg.sourceforge.net

0

Czytaj ze zrozumieniem... Ja pisałem tylko o bibliotece do dźwięku, facet z biblioteką graficzną nie ma problemów.

http://audiere.sourceforge.net/

News
2006.02.13 - Audiere 1.9.4 Released

It's been about two and a half years since the previous release of Audiere, and much has happened in that time. Here are the highlights:[...]

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