2017-12-19 5 views
0

Verwenden von SDL, um ein einfaches Spiel zu erstellen, und ich höre Musik vom Start des Programms im Hintergrund, aber ich möchte prüfen können, wann die Musik nicht mehr abgespielt wird kann gestartet werden. Ich verwende die SDL_mixer-Bibliothek zum Laden und Abspielen der Musik. Song wird im Konstruktor der Klasse definiert als NULL dann geben sie den Namen Track und spielen sie in der „loadTrack“ Methode in dieser KlasseÜberprüfen, ob Musik mit SDL2 abgespielt wird

bool loadTrack() 
{ 
    song = Mix_LoadMUS("backgroundmusic.mp3"); 
    if (song == NULL) 
    { 
     return false; 
    } 
    else 
    { 
     Mix_PlayMusic(song, -1); 
     return true; 
    } 
} 

Ich bin Laden und die Musik in einer Klasse spielen ich Musik genannt gemacht, . Ich möchte eine andere Methode in der Klasse verwenden, die aufgerufen werden kann und gibt true zurück, wenn der Track fertig gespielt wurde und false, wenn er noch spielt. Mein Problem ist, dass ich keine Ahnung habe, wie man überprüft, ob der Track noch läuft oder ob die Mixer-Bibliotheken eine eigene Funktion haben, um zu überprüfen, ob sie noch läuft.

Antwort

0

SDL_Mixer hat Mix_PlayingMusic(), um zu überprüfen, ob Musik wiedergegeben wird. Aber da du -1 an Mix_PlayMusic übergibst, wird es für immer in Schleife und spielt, hört nie auf.

Ich denke, Sie können den Song "manuell" neu starten, indem Sie 1 (einmal abspielen) statt -1 an Mix_PlayMusic übergeben. Überprüfen Sie dann in Ihrer Hauptschleife, bevor Sie zum nächsten Frame gehen, ob die Musikwiedergabe aufgehört hat, so dass Sie sie entweder erneut starten oder eine andere Musik abspielen können. Dies führt jedoch zu einer kleinen Pause zwischen den einzelnen Neustarts (etwa 1 Frame-Zeit ~ 1/60s, wenn Ihr Spiel mit 60 fps läuft). Wenn Sie also einfach Musik nahtlos loopen möchten, lassen Sie SDL_Mixer lieber tun, als dies manuell zu tun.

+0

genau die Antwort, die ich brauchte, werde es ausprobieren, wenn ich später nach Hause komme, danke – Bananas88

Verwandte Themen